Ajax跨越問題原因分析與解決思路

巔峰小學生發表於2018-05-02

1.什麼是AJAX跨域問題

簡單來說,就是前端呼叫後端服務介面時
如果服務介面不是同一個域,就會產生跨域問題

2.AJAX跨域場景

前後端分離、服務化的開發模式
前後端開發獨立,前端需要大量呼叫後端介面的場景
只要後端介面不是同一個域,就會產生跨域問題
跨域問題很普遍,解決跨域問題也很重要

3.AJAX跨域原因

瀏覽器限制:瀏覽器安全校驗限制
跨域(協議、域名、埠任何一個不一樣都會認為是跨域)
XHR(XMLHttpRequest)請求

4.AJAX跨域問題解決思路

瀏覽器:瀏覽器取下跨域校驗,實際價值不大
XHR:不使用XHR,使用JSONP,有很多弊端,無法滿足現在的開發要求
跨域:被呼叫方修改支援跨域呼叫(指定引數);呼叫方修改隱藏跨域(基於代理)

5.JSONP解決跨域訪問

1.服務端JSONP格式資料

如客戶想訪問 : http://www.runoob.com/try/ajax/jsonp.php?jsonp=callbackFunction

假設客戶期望返回JSON資料:[“customername1”,”customername2”]。

真正返回到客戶端的資料顯示為: callbackFunction([“customername1”,”customername2”])。

服務端檔案jsonp.php程式碼為:

jsonp.php 檔案程式碼

<?php
header(`Content-type: application/json`);
//獲取回撥函式名
$jsoncallback = htmlspecialchars($_REQUEST [`jsoncallback`]);
//json資料
$json_data = `["customername1","customername2"]`;
//輸出jsonp格式的資料
echo $jsoncallback . "(" . $json_data . ")";
?>
2.客戶端
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>JSONP 例項</title>
    <script src="http://cdn.static.runoob.com/libs/jquery/1.8.3/jquery.js"></script>    
</head>
<body>
<div id="divCustomers"></div>
<script>
$.getJSON("http://www.runoob.com/try/ajax/jsonp.php?jsoncallback=?", function(data) {

    var html = `<ul>`;
    for(var i = 0; i < data.length; i++)
    {
        html += `<li>` + data[i] + `</li>`;
    }
    html += `</ul>`;

    $(`#divCustomers`).html(html); 
});
</script>
</body>
</html>


相關文章