搞了大半天,终于把使用JSOP方法中遇到的问题解决了,时间一直耗在callback上:
调的过程中cb回调函数一直不能被触发(一开始B代码,是一个txt文件,里面有一段文字),最后将B代码设定成js文件,js中回调函数名称需要和A请求中callback函数名一致,不然会报找不到函数。
先前我一直认为A请求中的callback只是jsonp函数的最后一个参数,和服务端没有关系。
http://localhost:63342/ajaxRequest/js/reponse.js?callback=cb
?号后是传入的参数,cb是回调函数名称,将你自己在客户端定义的回调函数的函数名传送给服务端,服务端则会返回以你定义的回调函数名的方法,将获取的json数据传入这个方法完成回调。
这其实就是JSONP的简单实现模式,或者说是JSONP的原型:创建一个回调函数,然后在远程服务上调用这个函数并且将JSON 数据形式作为参数传递,完成回调。
将JSON数据填充进回调函数,这就是JSONP的JSON+Padding的含义吧。
A向B发送请求:
A代码:
function jsonp(url, data, callback) {
var script = document.createElement('script');
document.body.appendChild(script);
data = data || {};
data.callback = 'cb';// + new Date().getTime();
window[data.callback] = callback;
url += '?' + $.param(data);
script.src = url;
script.onload = function () {
document.body.removeChild(script);
}
}
functioncalltest() {
jsonp('http://localhost:63342/ajaxRequest/js/reponse.js', {test:'ok'},cb);
}
function cb(data){
alert(data.message);
};
B 代码:reponse.js//调用callback函数
cb({message:"success"});
参考资料:http://www.cnblogs.com/chopper/archive/2012/03/24/2403945.html