Web Service 是不能进行跨域请求数据的,但是我们应该怎么解决jQuery Ajax 跨域请求数据的方法呢。JSONP就是答案,我们可以使用JSONP实现jQuery Ajax跨域访问的问题。
说说jsonp是怎么产生的吧,首先下面几个问题应该了解:
示例代码如下所示:
$.ajax({ type : "post", url :'http://跨域域名/test?callback=GetPersonName', dataType : "jsonp", jsonpCallback:"callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback) jsonpCallback:"GetPersonName",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据 success: function(json){ alert('用户名为: ' + json.Name); }, error: function(){ alert('fail'); } });
服务端C#代码如下所示
String callbackFunName = Request.QueryString["callback"]; Response.Write(callbackFunName + "({ \"name\":\"知道91博客\"})");
服务端获取到callback的值为GetPersonName,然后返回GetPersonName({ \"name\":\"知道91博客\"})这个字符串给客服端,jQuery由于封装了JSONP,在处理jsonp类型的ajax时会自动将返回GetPersonName({ \"name\":\"知道91博客\"})中的参数{ \"name\":\"知道91博客\"}传递给success:function(json)的属性方法,因此我们可以看到显示“用户名为:知道91博客”的弹出框。
好了,到此通过jQuery的Ajax的JSONP方法就可以实现跨域请求数据。