采用script标签进行跨域请求,代码如下:
getJsonP(src);
//jsonP跨域
function getJsonP(src) {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = '<span style="font-family: Arial, Helvetica, sans-serif;">http://crossdomain.com/services.php</span>?jsonpCallback=callback';
document.head.appendChild(script);
}
function callback(msg) {
if ("00" == msg.resultCode) { // 请求成功
}
其他采用jQuery进行跨域原理都类似,只是jQuery进行了一下封装,采用ajax进行调用,更加直接。
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$.ajax({
url:"http://crossdomain.com/services.php",
dataType:'jsonp',
data:'',
jsonp:'callback',
success:function(result) {
for(var i in result) {
alert(i+":"+result[i]);//循环输出a:1,b:2,etc.
}
},
timeout:3000
});
</script>
Jsonp原理:
首先在客户端注册一个callback, 然后把callback的名字传给服务器。
此时,服务器先生成 json 数据。
然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp.
最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。
客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里.(动态执行回调函数)