JSONP跨域请求解决方法使用

搞了大半天,终于把使用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

你可能感兴趣的:(JSONP跨域请求解决方法使用)