jsonp總結

因爲「同源策略」的限制,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直接請求

相關文章
相關標籤/搜索