Jsonp的原理:通过script标签可以访问不同源的地址,所以在页面中使用script标签中src属性访问不同源地址;
客户端页面中,使用JS创建一个新的script标签并添加到页面中,为该标签指定src等于请求服务端的地址,并在js中定义一个对数据的处理函数fn。服务端获取所需要的数据,将数据写在一段js代码中:echo “fn({$data})”;,在响应头中设置content-type为js格式,返回给客户端,与客户端的js配合执行对数据的操作。
客户端代码:
<script>
var fnName ='jsonp_'+Date.now()+Math.random().toString().substr(2,5); //设置唯一的fnName,为了避免与php内置的函数重名
var script = document.createElement('script');
script.src = 'http://ajax2nd.abcd/jsonp/server.php?callback='+fnName;
document.body.appendChild(script);
window[fnName]=function(data) {
console.log(data);
delete window[fnName];
document.body.removeChild("script");
}
</script>
服务端:
header('Content-Type: application/javascript');
$result=json_encode($data);
$callback_name=$_GET['callback'];
echo "typeof {$callback_name}==='function' && {$callback_name}({$result})";