⑴ jsonp ajax 跨域訪問怎麼實現的
說說個人理解。首先需要知道幾個知識:
跨域js是允許的。比如你在localhost跑一段html,裡面引用了<script href="http://www..com/xxxx.js"></script>這是完全允許的。
動態載入js是允許的。可以通過js創建一個<script>,設置它的href="http://跨域域名/xxx.js",然後appendChild到<head>里去,瀏覽器會載入這段js並執行。
js的href可以指向動態腳本,比如<script href="http://某域名/xxx.php?key1=value1&key2=value2">
jsonp請求,伺服器給的返回值實質上是js代碼。jsonp是利用1 2和3的特點來實現的。
jsonp的具體過程為:
請求前,寫好一個回調函數比如jsonpCallback = function(data) { ... }。
請求時,利用1 2 3的特性,載入一個js文件:url形如"http://跨域域名/jsonp.php?callback=jsonpCallback&其它參數"。
伺服器讀區callback函數的函數名,計算好要返回的值比如data={a:b, c:d},拼接一段js代碼:jsonpCallback(data)。傳給客戶端的內容變成jsonpCallback({a:b, c:d})
前端拿到js代碼,執行jsonpCallback({a:b, c:d}),jsonp的過程完成。