因爲「同源策略」的限制,ajax不能作跨域請求,jsonp是當下解決跨域請求最流行的方案,來個例子(index.html):javascript
<!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
<?php $info = array("name"=>"復讀機2","age"=>223); $infoencode = json_encode($info); $callback = $_GET["callback"]; echo $callback."(".$infoencode.")";//返回帶有json格式數據的字符串 ?>
說明一下:html
發出請求的頁面的執行過程:java
動態添加script標籤,當添加完成以後,當即向json.php頁面作出請求,這個請求是get請求,並攜帶callback=jsonpCallback查詢字符串。jquery
被請求的頁面的執行過程:ajax
1將關聯數組經過json_encode函數轉化爲json數據{"name":"復讀機","age":23}並賦值給$infoencode變量json
2經過$_GET函數獲取callback的值jsonpCallback跨域
3返回jsonpCallback({"name":"\u590d\u8bfb\u673a2","age":223})(這個值是經過utf-8編碼的)數組
發送請求頁面的執行過程:app
收到一個執行函數,而且執行jsonpCallback函數,完成數據傳輸!
注意的地方是:1因爲jsonp的原理,同域也能夠接收到數據;2不一樣子域名之間也屬於跨域,不能經過ajax直接請求