现在的位置: 首页 > ajax&jquery&javascript > 正文
$.getJSON()跨域请求
2015年07月10日 ajax&jquery&javascript ⁄ 共 1607字 暂无评论

$.getJSON()跨域请求

以前总是没搞明白是怎么回事,现在是迫不得已,就仔细看了看说明文档,终于测试成功了,记下:

 1,同一域名下和其他的请求可以是一样的

js:

        var url="http://localhost:2589/a.ashx";
        $(function(){
            $.getJSON(url,function(data){
                alert (data.Name);
            })
        });

 服务器返回字符串:

{"Name":"loogn","Age":23}

 2,不同域名下

js:

       var url="http://localhost:2589/a.ashx?callback=?";
        $(function(){
            $.getJSON(url,function(data){
                alert (data.Name);
            })
        });

 服务器返回字符串:

jQuery1706543070425920333_1324445763158({"Name":"loogn","Age":23})

 返回的字符串就是一个调用一个叫“jQuery1706543070425920333_1324445763158” 的函数,参数是{"Name":"loogn","Age":23}。

其实这个很长的函数名是请求路径中callback=?的作用,我想应该是这样的:$.getJSON方法生成一个对回调方法的引用的名字,换掉?。上面请求会变成

http://localhost:2589/a.ashx?callback=jQuery1706543070425920333_1324445763158&_=1324445763194,所以服务器回返json时要处理一下,如:

 

    string cb = context.Request["callback"];
    context.Response.Write(cb + "(" + json + ")");

 

 

参数名callback也可换成jsoncallback,我想是怕冲突吧,jsoncallback应该优先检测,没有再检测callback(没测试!!)

?也可是具体的函数名,这样回调函数就不能是匿名的了,用?生成只是jQuery为我们的一般操作提供的一个便利。

 

 jsonp原理: 
首先在客户端注册一个callback (如:'jsoncallback'), 然后把callback的名字(如:jsonp1236827957501)传给服务器。 
此时,服务器先生成 json 数据。 
然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 'jsoncallback'的值 jsonp1236827957501 . 
最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。 
客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时javascript文档数据,作为参数,
传入到了客户端预先定义好的 callback 函数(如上例中jquery $.ajax()方法封装的的success: function (json))里.(动态执行回调函数) 
可以说jsonp的方式原理上和<script src="http://跨域/...xx.js"></script>是一致的(qq空间就是大量采用这种方式来实现跨域数据交换的) .JSONP是一种脚本注入(Script Injection)行为,所以也有一定的安全隐患.  

给我留言

您必须 [ 登录 ] 才能发表留言!

×