jquery选择器|Jquery利用getScript实现跨域请求数据

更新时间:2019-06-25    来源:jquery    手机版     字体:

【www.bbyears.com--jquery】

先来看看getScript()用法。

getScript() 方法通过 HTTP GET 请求载入并执行 JavaScript 文件。

参数 描述 url 将要请求的 URL 字符串。 success(response,status) 可选。规定请求成功后执行的回调函数。 额外的参数: response - 包含来自请求的结果数据 status - 包含请求的状态("success", "notmodified", "error", "timeout" 或 "parsererror")
在jQuery1.3.2中,您可以通过使用JSONP形式的回调函数来加载其他网域的JSON数据,如"myurl?callback=?"。jQuery将自动替换?为正确的函数名,以执行回调函数。

Jsonp原理:

首先在客户端注册一个callback, 然后把callback的名字传给服务器。

此时,服务器先生成 json 数据。

然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp.

最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。

客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里动态执行回调函数。

实例:

 代码如下

jquery代码:

$.getJSON("http://www.app.com/index.php?c=add&callback=?",{id: 10, name: "test"}, function(data){

alert(data.msg);

});

服务端返回:

jsonp1310628945031({"rs":true,"msg":"u60a8u7684u4fe1u606fu63d0u4ea4u6210u529fuff01"})

PHP代码:

$result["rs"] = false;

$result["msg"] = "您的信息提交成功!";

$json = new Services_JSON();

header("Content-Type: application/json");

echo $_GET["callback"]."(".$json->encode($result).")";

例子2

假设http://www.你的域名.com/data.js 这个远程文件data.js内容如下:

 代码如下

testData={
    "rool": [
        {
            "desc": "小鸟_描述",
            "img": "h/160",
            "link": "2907109968",
            "title": "小鸟_标题"
        }
    ],
    "blockid": 1,
    "itemid": 1,
    "opt": 0,
    "pageid": 1,
    "tot": 1,
    "tplid": 0,
    "type": "mod_list_pic"
};
jQuery.getScript("http://www.你的域名.com/data.js", function(){
   var data = testData;
   alert(data["rool"][0]["desc"]);//输出 “小鸟_描述”
});

说明:ajax不能跨域问题,大家应该都清楚。但是script标签能够加载其他域的文件,所以我们可以利用这点,进行跨域get操作。
这种方案要求跨域文件返回的数据必须是合法的JSON格式或者如JS文件的格式。
这种方式比较简单,只需要几行代码即可。如果不用jquery的话,可以通过动态创建script标签,然后设置src值,不过得注意判断script内容加载是否完成。

当然,跨域的方法很多,这里说的只是其中一种。

本文来源:http://www.bbyears.com/wangyezhizuo/55245.html