利用了script src没有同源限制,进行跨域请求。
例如,www.a.com 想请求 www.b.com 的内容
//a网站的请求页:
//b网站的jsonp.js 响应页
jsonp({'name':'amy',age:22})
以上便是js的jsonp实现跨域,其实它和ajax的XHR对象并没有任何关系,由于jquery 把jsonp的实现封装在了ajax中,所以jsonp和ajax经常同时被提起.
$.ajax({
type: "GET",
url: "http://www.b.com/jsonp.js"
dataType: "json",
success: function(data) {
//对data的处理
},
error: function(jqXHR){
alert("发生错误:" + jqXHR.status);
},
});
如果不使用jsonp会有跨域报错。
$.ajax({
type: "GET",
url: "http://www.b.com/jsonp.js"
dataType: "jsonp",
jsonp:"callback",//“callback”:任意名字都可以
success: function(data) {
//对data的处理
},
error: function(jqXHR){
alert("发生错误:" + jqXHR.status);
},
});
$jsonp = $_GET["callback"];//callback名字和请求的名字相同
//原来:$result ='{"success":true,"msg":"找到员工:员工编号:' . $value["number"] .'"}';
//改为:
$result =$jsonp . '({"success":true,"msg":"找到员工:员工编号:' . $value["number"] .'"})';
ajax的处理把在get请求后追加了callback参数,并给她赋予了参数值,响应值追加了callback的参数值。