AJAX - XMLHttpRequest



在 AJAX 中,XMLHttpRequest 扮演着非常重要的角色。XMLHttpRequest 用于在后台与 Web 服务器交换数据,而用户/客户端在前景工作,然后使用接收到的数据更新网页的一部分,而无需重新加载整个页面。

我们也可以说,XMLHttpRequest (XHR) 可以被各种 Web 浏览器脚本语言(如 JavaScript、JScript、VBScript 等)用于在 HTTP 的帮助下与 Web 服务器交换 XML 数据。除了 XML 之外,XMLHttpRequest 还可以获取 JSON 等各种格式的数据。它在客户端和服务器端之间创建异步连接。

语法

variableName = new XMLHttpRequest()

使用 new 关键字以及 XMLHttpRequest() 构造函数,我们可以创建一个新的 XMLHttpRequest 对象。在调用 open() 函数初始化它之前,必须创建此对象,然后才能调用 send() 函数将请求发送到 Web 服务器。

XMLHttpRequest 对象方法

XMLHttpRequest 对象具有以下方法:

序号 方法名称和描述
1

new XMLHttpRequest()

用于创建一个 XMLHttpRequest() 对象

2

getAllResponseHeaders()

用于获取头部信息

3

getResponseHeader()

用于获取特定的头部信息

4

open(method, url, async, user, psw)

用于初始化请求参数。

这里:

method:请求类型 GET 或 POST 或其他类型

url:文件位置

async:对于异步请求设置为 true,对于同步请求设置为 false

user:可选用户名

psw:可选密码

5

send()

用于向 Web 服务器发送请求。通常用于 GET 请求。

6

send(string)

用于向服务器发送请求。通常用于 POST 请求。

7

setRequestHeader()

用于向头部添加键值对

XMLHttpRequest 对象属性

XMLHttpRequest 对象具有以下属性:

序号 属性名称和描述
1

onreadystatechange

设置处理请求状态更改的回调函数。

2

readyState

用于保存 XMLHttpRequest 的状态。它具有以下值:

  • 0: 请求未初始化

  • 1: 服务器连接已建立

  • 2: 请求已接收

  • 3: 请求正在处理

  • 4: 请求已完成,响应已就绪

3

responseText

用于将响应数据作为字符串返回

4

responseXML

用于将响应数据作为 XML 数据返回

5

status

用于返回请求的状态码。例如:

  • 200:表示 OK

  • 403:表示 Forbidden

  • 404:表示 Not Found

6

statusText

用于返回状态文本。例如,OK、Not Found 等。

XMLHttpRequest 的用法

在了解 XMLHttpRequest 的基本语法、方法和属性之后,我们学习如何在实际生活中使用 XMLHttpRequest。要在程序中使用 XMLHttpRequest,首先我们需要遵循以下主要步骤:

步骤 1 - 创建 XMLHttpRequest 对象

var variableName = new XMLHttpRequest()

步骤 2 - 创建 XMLHttpRequest 对象后,我们现在必须定义一个回调函数,该函数将在从 Web 服务器获取响应后触发。

XMLHttpRequestObjectName.onreadystatechange = function(){
   // Callback function body
}
XMLHttpRequestObjectName.open(method, url, async)
XMLHttpRequestObjectName.send()

步骤 3 - 现在我们使用 open() 和 send() 函数向 Web 服务器发送请求。

现在让我们借助以下示例了解 XMLHttpRequest 的工作原理:

示例

在下面的示例中,我们将从服务器获取数据。要从服务器获取数据,我们将点击“点击我”按钮。因此,当我们点击“点击我”按钮时,将调用 displayDoc() 函数。在 displayDoc() 函数中,我们创建一个 XMLHttpRequest 对象。然后我们创建一个回调函数来处理服务器响应。然后我们调用 XHR 对象的 open() 方法以使用 HTTP GET 方法和服务器 URL("https://jsonplaceholder.typicode.com/todos")初始化请求。然后我们调用 send() 函数发送请求。

因此,当服务器响应请求时,“onreadystatechange”属性将使用 XMLHttpRequest 对象的当前状态调用回调函数。如果“readyState”属性设置为 4(这意味着请求已完成)并且“status”属性设置为 200(这意味着成功响应),则响应数据将从“responseText”属性中提取,并使用 sample 元素的“innerHTML”属性显示 HTML 文档。

如果在请求期间发现错误,则回调函数中存在的 else 语句将执行。这就是我们如何从服务器获取数据。

<!DOCTYPE html>
<html>
<body>
<script>
   function displayDoc() {
      // Creating XMLHttpRequest object
      var myObj = new XMLHttpRequest();

      // Creating a callback function
      myObj.onreadystatechange = function() {
         if (this.readyState == 4 && this.status == 200) {
            document.getElementById("sample").innerHTML = this.responseText;
         }else{
            console.log("Error Found")
         }
      };
      // Open the given file
      myObj.open("GET", "https://jsonplaceholder.typicode.com/todos", true);

      // Sending the request to the server
      myObj.send();
   }
</script>
<div id="sample">
   <h2>Getting Data</h2>
   <p>Please click on the button to fetch data</p>
   <button type="button" onclick="displayDoc()">Click Me</button>
</div>
</body>
</html>

输出

Ajax XML http Request

结论

XMLHttpRequest 是 AJAX 的主要对象,AJAX 通过它在 Web 浏览器和 Web 服务器之间创建异步通信。因此,在下一篇文章中,我们将学习如何使用 XMLHttpRequest 对象发送请求。

广告