Ajax的应用中,由于安全的问题,浏览器默认是不支持跨域调用的,但是在1.2版本之后,Jquery的getJson方法就开始支持跨域调用,实现的原理主要是:虽然JavaScript不支持跨域调用,但是标签<Script>是支持跨域调用的,Jquery.GetJson方法就是利用这点实现的跨域调用。现在就来讨论下,如何利用Jquery.GetJson实现跨域调用。(当然你也可以使用Jquery.Ajax来实现跨域调用,但是其原理也是利用GetJson方法来实现的。)
Jquery.GetJson主要是通过传递Json格式的数据来实现跨域调用的,所以如何封装和解释Json数据就非常重要。Json格式请查看官网的解释(http://www.json.org/json-zh.html),Jquery本身就带有解析Json格式的方法(http://api.jquery.com/jQuery.each/)
这是Jquery官网对Jquery.GetJson的解释:
使用GetJson客户端实例:
Jquery.GetJson首先在客户端注册一个jsoncallback,然后把jsoncallback的名字(如:jsonp1236827957501)传给服务器。注意:服务端得到callback的数值后,要用jsonp1236827957501(......)把将要输出的json内容包括起来,用Response.Write(jsonp1236827957501(......))写入时,服务器生成 json 数据才能被客户端正确接收。
使用GetJson服务端实例:
这里要注意的是:Jquery1.5以后对Jquery.GetJson的方法的返回值做了修改,使用了jqXHR Object作为返回值。
在Jquery1.4中,对服务返回的Json数据格式有严格的要求,这是官网的解释:
在封装Json数据格式时,建议使用工具进行封装,不然容易产生错误,出错不易查找。
当然,跨域调用的方式有很多种,你可以使用$.Ajax来实现,但原理是一样的。Jquery给我们封装的方法还是挺方便的,建议使用。