首頁 >web前端 >js教程 >JSONP如何解決jQuery的跨域AJAX問題?

JSONP如何解決jQuery的跨域AJAX問題?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-30 09:32:14318瀏覽

How Can JSONP Solve jQuery's Cross-Domain AJAX Problems?

jQuery AJAX 跨域困境:使用JSONP 繞過CORS

由於跨域資源共享,跨域資料交互帶來了挑戰( CORS) 限制。當嘗試從一個網域到另一個網域(例如本機上的 test.php 和遠端伺服器上的 testserver.php)執行 AJAX 請求時,瀏覽器會強制執行這些限制,導致「錯誤」警報。

要克服此問題障礙,JSONP(帶填充的 JSON)作為一種可行的解決方法出現。它利用腳本元素的靈活性來跨域檢索資料。

jQuery 修改:
修改 test.php,透過將 dataType 參數變更為「jsonp」來利用 JSONP。

PHP 修改:
調整 testserver.php 以回顯 JSONP使用 jQuery 提供的回呼進行回應。

實作:

jQuery (test.php):

$.ajax({
    url: "testserver.php",
    dataType: 'jsonp', // Notice! JSONP <-- P (lowercase)
    success: function(json){
        // do stuff with json (in this case an array)
        alert("Success");
    },
    error: function(){
        alert("Error");
    }       
});

PHP (testserver.php):

<?php
$arr = array("element1", "element2", array("element31", "element32"));
$arr['name'] = "response";
echo $_GET['callback'] . "(" . json_encode($arr) . ");";
?>

使用$.getJSON() 的簡化方法:
或者,使用$.getJSON() 簡寫方法,該方法會自動附加「回呼=?」將URL 作為GET 參數。

$.getJSON("testserver.php", function(json){
    // do stuff with json (in this case an array)
    alert("Success");
});

以上是JSONP如何解決jQuery的跨域AJAX問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn