Ajax跨域請求的詳細闡述

一、Ajax跨域請求的寫法

Ajax中的跨域請求可以通過XMLHttpRequest對象的open()方法實現,其中要注意的是,跨域請求需要設置請求頭的Origin欄位,並且請求成功時,伺服器需要在響應頭中設置Access-Control-Allow-Origin欄位,對於不支持跨域請求的瀏覽器,需要使用其他方式進行兼容處理。以下為示例代碼:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://example.com/api/data',true);
xhr.setRequestHeader('Origin', 'http://localhost:8080');
xhr.onreadystatechange = function() {
  if (xhr.readyState == 4 && xhr.status == 200) {
    console.log(xhr.responseText);
  }
};
xhr.send();

二、JQAjax跨域請求

在jQuery中,跨域請求可以通過jsonp方式實現,也可以通過jQuery.ajax()方法中的設置進行處理,例如:使用xhrFields屬性來設置跨域請求的Cookie傳遞,dataType屬性來設置返回數據類型等,以下為示例代碼:

$.ajax({
  url: 'http://example.com/api/data',
  type: 'GET',
  crossDomain: true,
  xhrFields: {
    withCredentials: true
  },
  dataType: 'json',
  success: function(response) {
    console.log(response);
  },
  error: function(xhr, status, error) {
    console.log(error);
  }
});

三、Ajax跨域請求的處理方式

1. Ajax跨域請求200但沒進error的處理方式

如果Ajax跨域請求200但沒有進入error回調函數,可以根據返回的數據類型進行判斷並處理,例如:

$.ajax({
  url: 'http://example.com/api/data',
  type: 'GET',
  success: function(response, status, xhr) {
    if (typeof response === 'string') {
      response = JSON.parse(response);
    }
    console.log(response);
  }
});

2. Ajax跨域請求如何禁止預檢請求

某些情況下,伺服器不支持預檢請求,需要禁止Ajax發出預檢請求,可以設置xhr.setRequestHeader(‘x-requested-with’, ‘XMLHttpRequest’)請求頭來實現,例如:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://example.com/api/data',true);
xhr.setRequestHeader('Origin', 'http://localhost:8080');
xhr.setRequestHeader('x-requested-with', 'XMLHttpRequest');
xhr.onreadystatechange = function() {
  if (xhr.readyState == 4 && xhr.status == 200) {
    console.log(xhr.responseText);
  }
};
xhr.send();

3. Ajax跨域請求的解決方案

在瀏覽器中,可以通過JSONP、CORS、代理伺服器等方式進行跨域請求的處理,其中JSONP是比較兼容的解決方案,CORS需要伺服器端的支持,代理伺服器需要單獨搭建,以下為JSONP和CORS的示例代碼:

  1. JSONP方式的示例代碼:
  2.   <script>
        function processData(data) {
          console.log(data);
        }
        var script = document.createElement('script');
        script.src = 'http://example.com/api/data?callback=processData';
        document.head.appendChild(script);
      </script>
      
  3. CORS方式的示例代碼:
  4.   var xhr = new XMLHttpRequest();
      xhr.open('GET', 'http://example.com/api/data',true);
      xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
          console.log(xhr.responseText);
        }
      };
      xhr.withCredentials = true;
      xhr.send();
      

四、Ajax跨域請求的原理

Ajax跨域請求的原理在於瀏覽器遵循同源策略,對於不同源的資源訪問進行限制,跨域請求需要伺服器端的支持,通過響應頭中Access-Control-Allow-Origin、Access-Control-Allow-Methods、Access-Control-Allow-Headers、Access-Control-Max-Age等欄位的響應,表示是否允許跨域請求。瀏覽器通過預檢請求(OPTIONS)確認服務端是否允許跨域請求。客戶端可以通過相關配置或使用第三方工具進行跨域請求的處理。

原創文章,作者:ROGL,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/133958.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ROGL的頭像ROGL
上一篇 2024-10-04 00:02
下一篇 2024-10-04 00:02

相關推薦

  • 解決js ajax post 419問題

    對於使用ajax post請求時出現的419問題,我們需要進行以下幾個方面的闡述,包括返回碼的含義、可能出現的情況、解決方案等內容。 一、解析419返回碼 419返回碼錶示用戶超時…

    編程 2025-04-27
  • index.html怎麼打開 – 詳細解析

    一、index.html怎麼打開看 1、如果你已經擁有了index.html文件,那麼你可以直接使用任何一個現代瀏覽器打開index.html文件,比如Google Chrome、…

    編程 2025-04-25
  • Resetful API的詳細闡述

    一、Resetful API簡介 Resetful(REpresentational State Transfer)是一種基於HTTP協議的Web API設計風格,它是一種輕量級的…

    編程 2025-04-25
  • neo4j菜鳥教程詳細闡述

    一、neo4j介紹 neo4j是一種圖形資料庫,以實現高效的圖操作為設計目標。neo4j使用圖形模型來存儲數據,數據的表述方式類似於實際世界中的網路。neo4j具有高效的讀和寫操作…

    編程 2025-04-25
  • 關鍵路徑的詳細闡述

    關鍵路徑是項目管理中非常重要的一個概念,它通常指的是項目中最長的一條路徑,它決定了整個項目的完成時間。在這篇文章中,我們將從多個方面對關鍵路徑做詳細的闡述。 一、概念 關鍵路徑是指…

    編程 2025-04-25
  • AXI DMA的詳細闡述

    一、AXI DMA概述 AXI DMA是指Advanced eXtensible Interface Direct Memory Access,是Xilinx公司提供的基於AMBA…

    編程 2025-04-25
  • c++ explicit的詳細闡述

    一、explicit的作用 在C++中,explicit關鍵字可以在構造函數聲明前加上,防止編譯器進行自動類型轉換,強制要求調用者必須強制類型轉換才能調用該函數,避免了將一個參數類…

    編程 2025-04-25
  • HTMLButton屬性及其詳細闡述

    一、button屬性介紹 button屬性是HTML5新增的屬性,表示指定文本框擁有可供點擊的按鈕。該屬性包括以下幾個取值: 按鈕文本 提交 重置 其中,type屬性表示按鈕類型,…

    編程 2025-04-25
  • Vim使用教程詳細指南

    一、Vim使用教程 Vim是一個高度可定製的文本編輯器,可以在Linux,Mac和Windows等不同的平台上運行。它具有快速移動,複製,粘貼,查找和替換等強大功能,尤其在面對大型…

    編程 2025-04-25
  • crontab測試的詳細闡述

    一、crontab的概念 1、crontab是什麼:crontab是linux操作系統中實現定時任務的程序,它能夠定時執行與系統預設時間相符的指定任務。 2、crontab的使用場…

    編程 2025-04-25

發表回復

登錄後才能評論