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

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

DDD
發布: 2024-12-22 18:40:10
原創
476 人瀏覽過

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

jQuery AJAX 跨域通訊挑戰

當遇到跨域AJAX 請求時,來自一個域的HTML 文件嘗試建立一個請求到不同的域,就會出現困難。讓我們來探討一個包含兩個PHP 檔案test.php 和testserver.php 的場景:

test.php:

<script src="scripts/jq.js" type="text/javascript"></script>
<script>
  $(function() {
    $.ajax({
      url: "testserver.php",
      success: function() {alert("Success")},
      error: function() {alert("Error")},
      dataType: "json",
      type: "get"
    });
  });
</script>
登入後複製

testserver.php :

<?php
$arr = array("element1", "element2", array("element31", "element32"));
$arr['name'] = "response";
echo json_encode($arr);
?>
登入後複製

當兩個檔案託管在同一伺服器上時,AJAX 請求成功了。但是,當它們放置在不同的伺服器上時,請求會失敗,從而觸發「錯誤」警報。這是由於瀏覽器的同源策略(SOP)限制了跨域資料共享。

解決方案:利用 JSONP

要克服 SOP,我們可以使用 JSONP(帶填充的 JSON)。 JSONP 允許將資料作為函數呼叫傳送,從而規避 SOP 施加的限制。

jQuery:

$.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:

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

在此修改後的程式碼包含'dataType: 'jsonp'' 表示使用JSONP。 PHP 腳本透過「$_GET['callback']」檢索 jQuery 傳送的回呼函數名稱,並使用它來形成輸出。 PHP 腳本中的輸出應顯示為回呼函數,後面跟著 JSON 數據,確保數據作為函數呼叫進行傳輸。

或者,jQuery 提供 $.getJSON() 方法,這是處理的簡寫JSONP 請求。但是,它要求 URL 包含「callback=?」作為 GET 參數,jQuery 動態插入自己的回調方法。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板