XMLHttpRequest對象的詳解

XMLHttpRequest對象是JavaScript中實現與伺服器進行HTTP通信的重要介面,同時也是AJAX技術的核心。XMLHttpRequest對象通過使用HTTP協議在瀏覽器和伺服器之間交換數據,實現非同步刷新數據,而不需要刷新整個頁面。本文將從多個方面對XMLHttpRequest對象做詳細的闡述。

一、XMLHttpRequest對象的創建與基本屬性

XMLHttpRequest對象通過創建一個新的XMLHttpRequest實例來使用。創建XMLHttpRequest對象的方法有兩種:使用構造函數XMLHttpRequest()和使用ActiveXObject兼容IE瀏覽器。創建一個XMLHttpRequest對象的示例代碼如下:


var xmlhttp;
if (window.XMLHttpRequest) {
  // 兼容 IE7+, Firefox, Chrome, Opera, Safari 瀏覽器
  xmlhttp = new XMLHttpRequest();
} else {
  // 兼容 IE6, IE5 瀏覽器
  xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}

使用XMLHttpRequest對象的基本屬性如下:

  • onreadystatechange:當readyState屬性改變時觸發的事件
  • readyState:請求的狀態。狀態有0(初始化XMLHttpRequest對象)、1(XMLHttpRequest對象正常打開)、2(已發送一個請求,但未接收到響應)、3(已接收到部分響應數據,仍在等待剩餘的響應數據)、4(已完成響應的所有操作)
  • status:響應的HTTP狀態碼
  • statusText:HTTP狀態的文本描述
  • responseText / responseXML:響應內容的文本/ XML對象

二、XMLHttpRequest對象發送請求及響應處理

創建XMLHttpRequest對象實例並設置請求的url、請求方式和請求的傳遞參數後,我們需要發送請求並處理伺服器響應。常見的請求方式有GET和POST方法,其中GET方式的請求參數附在請求url後面,而POST則是放在請求體中。XMLHttpRequest對象的發送請求和處理響應的示例代碼如下:


xmlhttp.open("GET", "url", true);
// 判斷狀態並處理響應
xmlhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    // 處理響應內容
    console.log(this.responseText);
  }
};
xmlhttp.send();

三、XMLHttpRequest對象的進度事件

XMLHttpRequest對象除了可以發送請求和接收伺服器響應外,還可以監聽請求的進度事件,可以用來獲取當前請求的狀態、上傳和下載的進度百分比。XMLHttpRequest對象的進度事件包含5種類型:loadstart、progress、abort、error和load,分別表示請求開始、數據正在上傳或下載、請求被取消、請求失敗和請求已完成。XMLHttpRequest對象的進度事件示例代碼如下:


// 請求開始
xmlhttp.onloadstart = function(e) {
  console.log('loadstart', e);
};

// 接收伺服器響應數據
xmlhttp.onprogress = function(e) {
  if (e.lengthComputable) {
    console.log('progress:' + Math.round(e.loaded / e.total * 100) + '%');
  } else {
    console.log('progress:' + e.loaded);
  }
};

// 請求被取消
xmlhttp.onabort = function(e) {
  console.log('abort', e);
};

// 請求失敗
xmlhttp.onerror = function(e) {
  console.log('error', e);
};

// 請求完成
xmlhttp.onload = function(e) {
  console.log('load', e);
};

四、XMLHttpRequest對象的跨域請求

XMLHttpRequest對象的跨域請求是指JavaScript代碼在訪問不同域名的伺服器資源時,由於瀏覽器的同源策略限制,默認情況下只能獲取同一域名下的數據。為了解決這個問題,我們需要使用XMLHttpRequest對象的跨域請求功能。常用的跨域請求方式有代理伺服器、JSONP和CORS。其中CORS是現代瀏覽器支持的一種跨域請求方式。XMLHttpRequest對象的跨域請求示例代碼如下:


var xmlhttp = new XMLHttpRequest();
url = 'http://example.com/sample.json';
xmlhttp.open('GET', url, true);
xmlhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    console.log(this.responseText);
  }
};
xmlhttp.send();

五、XMLHttpRequest對象的安全考慮

XMLHttpRequest對象在使用時需要注意安全性問題。其中XMLHttpRequest對象不能跨域請求cookies,否則會被拒絕。我們可以使用XMLHttpRequest對象的withCredentials屬性來支持跨域請求cookies。XMLHttpRequest對象在通過GET方式發送請求時,請求的url中不能包含敏感信息,否則會導致瀏覽器將該信息暴露出去。同時,XMLHttpRequest對象可以通過設置請求頭中的Content-Type屬性來支持上傳文件。XMLHttpRequest對象的安全響應示例代碼如下:


//信任任何來源
Access-Control-Allow-Origin: *

//請求方式
Access-Control-Allow-Methods: *

//自定義請求頭
Access-Control-Allow-Headers: *

//可以攜帶cookies
Access-Control-Allow-Credentials: true

結語

本文從五個方面對XMLHttpRequest對象進行了詳細的闡述,包括XMLHttpRequest對象的創建與基本屬性、XMLHttpRequest對象發送請求及響應處理、XMLHttpRequest對象的進度事件、XMLHttpRequest對象的跨域請求和XMLHttpRequest對象的安全考慮。希望通過本篇文章對XMLHttpRequest對象有更為深入的了解,為前端開發的實踐提供幫助。

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
HHAPI的頭像HHAPI
上一篇 2025-02-01 13:34
下一篇 2025-02-01 13:34

相關推薦

  • 面向對象編程、類和對象

    面向對象編程(Object-Oriented Programming, OOP)是一種編程方法,它將現實世界中的事物抽象為對象(Object),對象的屬性和方法被封裝成類(Clas…

    編程 2025-04-29
  • Mapster:一個高性能的對象映射庫

    本文將深入介紹furion.extras.objectmapper.mapster,一個高性能的對象映射庫,解釋它是如何工作的以及如何在你的項目中使用它。 一、輕鬆地實現對象之間的…

    編程 2025-04-28
  • Python返回對象類型

    Python是一種動態、解釋型、高級編程語言。Python是一種面向對象的語言,即所有的一切都是一個對象。 一、基本類型 Python中的基本類型有整數int、浮點數float、布…

    編程 2025-04-28
  • Python中通過對象不能調用類方法和靜態方法的解析

    當我們在使用Python編寫程序時,可能會遇到通過對象調用類方法和靜態方法失敗的問題,那麼這是為什麼呢?接下來,我們將從多個方面對這個問題進行詳細解析。 一、類方法和靜態方法的定義…

    編程 2025-04-27
  • Python內置函數——查看對象內存

    本文將介紹Python內置函數中,在開發中查看對象內存的相關函數。 一、id()函數 id()函數是Python內置函數,用於返回對象的唯一標識符,也就是對象在內存中的地址。 nu…

    編程 2025-04-27
  • 解決ERP運行時錯誤429:ActiveX不能創建對象 DAO350

    ERP運行時錯誤429是由於「ActiveX不能創建對象」而引發的。這種錯誤通常是由於您在嘗試訪問Microsoft Access資料庫時缺少了必要的組件。 一、安裝並註冊DAO庫…

    編程 2025-04-27
  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變數讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25

發表回復

登錄後才能評論