jsonp总结
由于“同源策略”的限制,ajax不能做跨域请求,jsonp是当下解决跨域请求最流行的方案,来个例子(index.html):
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>Document</title> <script src="js/jquery.js"></script> </head> <body> <input type="button" value="submit" id="submit"> <div id="txt"></div> <script> //监听对象 // document.getElementById('submit').onclick = function(){ // } //简单的jsonpCallback封装 function jsonpCallback(data){//回调函数 console.log(data); } var jsonp = document.createElement("script");//动态添加脚本 jsonp.type = "text/javascript"; jsonp.src="json.php?callback=jsonpCallback"; document.getElementsByTagName("head")[0].appendChild(jsonp); </script> </body> </html>
json.php页面:
<?php $info = array("name"=>"复读机2","age"=>223); $infoencode = json_encode($info); $callback = $_GET["callback"]; echo $callback."(".$infoencode.")";//返回带有json格式数据的字符串 ?>
说明一下:
发出请求的页面的执行过程:
动态添加script标签,当添加完成之后,立即向json.php页面做出请求,这个请求是get请求,并携带callback=jsonpCallback查询字符串。
被请求的页面的执行过程:
1将关联数组通过json_encode函数转化为json数据{"name":"复读机","age":23}并赋值给$infoencode变量
2通过$_GET函数获取callback的值jsonpCallback
3返回jsonpCallback({"name":"\u590d\u8bfb\u673a2","age":223})(这个值是通过utf-8编码的)
发送请求页面的执行过程:
收到一个执行函数,并且执行jsonpCallback函数,完成数据传输!
注意的地方是:1由于jsonp的原理,同域也可以接收到数据;2不同子域名之间也属于跨域,不能通过ajax直接请求