JSONP

JSONP(JSON with Padding 填充式 JSON 或參數式 JSON)
在 js 中,我們雖然不能直接用 XMLHttpRequest 請求不同域上的數據時,但是在頁面上引入不同域上的 js 腳 本文件卻是可以的,jsonp 正是利用這個特性來實現的。
JSONP 由兩部分組成:回調函數和數據。回調函數是當響應到來時應該在頁面中調用的函數,而數據就是傳 入回調函數中的 JSON 數據。

        <script type="text/javascript">
            function dosomethins(jsondata) {
                // 處理獲得的json數據
            }
        </script>
        <script src='http://example.com/data.php?callback=dosomthing'></script>
  • 首先第一個script標簽定義了一個處理數據的函數;
  • 然后第二個script標簽載入了一個js文件,http://example.com/data.php 是數據所在地址,但是因為是當做js來引入的,所以http://example.com/data.php 返回的必須是一個能執行的js文件。
  • 最后js文件載入成功之后,會執行我們在url參數中指定的函數,并且把我們需要json數據作為參數傳入,所以php文件如下:
        <?php
        $callback = $_GET('callback');   //得到回調函數名
        $data = array('a', 'b', 'c');  //要返回的數據
        echo $callback.'('.json_encode($data).')';  //輸出
        ?>

JSONP的優缺點:
優點:
1.它的兼容性更好,在更加古老的瀏覽器中都可以運行,不需要 XMLHttpRequest 或 ActiveX 的支持;
2.能夠直接訪問響應文本,支持在瀏覽器與服務器之間雙向通信
缺點:
1.JSONP 是從其他域中加載代碼執行。如果其他域不安全,很可能會在響應中夾帶一些惡意代碼,而此時除了 完全放棄 JSONP 調用之外,沒有辦法追究。因此在使用不是你自己運維的 Web 服務時,一定得保證它安全可靠。
2.它只支持 GET 請求而不支持 POST 等其它類型的 HTTP 請求;它只支持跨域 HTTP 請求這種情況,不能解決 不同域的兩個頁面之間如何進行 JavaScript 調用的問題

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容