您的位置:首页 > Web前端 > JQuery

Jquery Ajax GetJson实现跨域调用

2011-02-24 11:51 543 查看
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客户端实例:

$.getJSON("http://XXX.XXX.XXX?jsoncallback=?",                         //URL  jsoncallback=?必须
{id:“”,name:“” },                                                                 //Url参数,当然你也可以放在URL后面
function (data) {                                                                       //获取成功,服务器传回的Json格式的数据
$.each(data, function (key, list) {
//解析Json数据
});
});

Jquery.GetJson首先在客户端注册一个jsoncallback,然后把jsoncallback的名字(如:jsonp1236827957501)传给服务器。注意:服务端得到callback的数值后,要用jsonp1236827957501(......)把将要输出的json内容包括起来,用Response.Write(jsonp1236827957501(......))写入时,服务器生成 json 数据才能被客户端正确接收。

使用GetJson服务端实例:

//跨域调用 获取方法名
if (Request["jsoncallback"] != null)
{
string jsoncall = Request["jsoncallback"].ToString();
//封装JSon格式
sb.Append(jsoncall + "([");
}
.......//封装JSon格式  Jsonp1236827957501([{"id":"XXX","aa":"bb"}])...
Response.Write(sb.ToString());
Response.End();


这里要注意的是:Jquery1.5以后对Jquery.GetJson的方法的返回值做了修改,使用了jqXHR Object作为返回值。



在Jquery1.4中,对服务返回的Json数据格式有严格的要求,这是官网的解释:



在封装Json数据格式时,建议使用工具进行封装,不然容易产生错误,出错不易查找。
当然,跨域调用的方式有很多种,你可以使用$.Ajax来实现,但原理是一样的。Jquery给我们封装的方法还是挺方便的,建议使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: