AJAX - XMLHttpRequest 对象
XMLHttpRequest 对象是 AJAX 的基石。
- 创建 XMLHttpRequest 对象
- 定义回调函数
- 打开 XMLHttpRequest 对象
- 向服务器发送请求
XMLHttpRequest 对象
所有现代浏览器都支持 XMLHttpRequest 对象。
XMLHttpRequest 对象可用于在后台与 Web 服务器交换数据。这意味着可以更新网页的部分内容,而无需重新加载整个页面。
创建 XMLHttpRequest 对象
所有现代浏览器(Chrome、Firefox、IE、Edge、Safari、Opera)都有内置的 XMLHttpRequest 对象。
创建 XMLHttpRequest 对象的语法:
variable = new XMLHttpRequest();
定义回调函数
回调函数是作为参数传递给另一个函数的函数。
在这种情况下,回调函数应包含响应准备就绪时要执行的代码。
xhttp.onload = function() { // 当响应准备就绪时要做什么 }
发送请求
如需向服务器发送请求,您可以使用 XMLHttpRequest 对象的 open()
和 send()
方法:
xhttp.open("GET", "ajax_info.txt"); xhttp.send();
实例
// 创建 XMLHttpRequest 对象 const xhttp = new XMLHttpRequest(); // 定义回调函数 xhttp.onload = function() { // 您可以在这里使用数据 } // 发送请求 xhttp.open("GET", "ajax_info.txt"); xhttp.send();
跨域访问(Access Across Domains)
出于安全原因,现代浏览器不允许跨域访问。
这意味着网页和它尝试加载的 XML 文件必须位于同一台服务器上。
W3School 上的例子都打开位于 W3School 域中的 XML 文件。
如果您想在自己的网页之一上使用上面的例子,您加载的 XML 文件必须位于您自己的服务器上。
XMLHttpRequest 对象方法
方法 | 描述 |
---|---|
new XMLHttpRequest() | 创建新的 XMLHttpRequest 对象。 |
abort() | 取消当前请求。 |
getAllResponseHeaders() | 返回头部信息。 |
getResponseHeader() | 返回特定的头部信息。 |
open(method, url, async, user, psw) |
规定请求。
|
send() | 向服务器发送请求,用于 GET 请求。 |
send(string) | 向服务器发送请求,用于 POST 请求。 |
setRequestHeader() | 将标签/值对添加到要发送的标头。 |
XMLHttpRequest 对象属性
属性 | 描述 |
---|---|
onload | 定义接收到(加载)请求时要调用的函数。 |
onreadystatechange | 定义当 readyState 属性发生变化时调用的函数。 |
readyState |
保存 XMLHttpRequest 的状态。
|
responseText | 以字符串形式返回响应数据。 |
responseXML | 以 XML 数据返回响应数据。 |
status |
返回请求的状态号
如需完整列表请访问 Http 消息参考手册 |
statusText | 返回状态文本(比如 "OK" 或 "Not Found") |
onload 属性
使用 XMLHttpRequest 对象时,您可以定义一个回调函数,以便在请求收到答复时执行。
请在 XMLHttpRequest 对象的 onload
属性中定义该函数:
实例
xhttp.onload = function() { document.getElementById("demo").innerHTML = this.responseText; } xhttp.open("GET", "ajax_info.txt"); xhttp.send();
多个回调函数
如果网站中有多个 AJAX 任务,则应创建一个执行 XMLHttpRequest 对象的函数,并为每个 AJAX 任务创建一个回调函数。
函数调用应包含 URL 以及响应准备就绪时要调用的函数。
实例
loadDoc("url-1", myFunction1); loadDoc("url-2", myFunction2); function loadDoc(url, cFunction) { const xhttp = new XMLHttpRequest(); xhttp.onload = function() {cFunction(this);} xhttp.open("GET", url); xhttp.send(); } function myFunction1(xhttp) { // 这里是动作 } function myFunction2(xhttp) { // 这里是动作 }
onreadystatechange 属性
readyState
属性保存 XMLHttpRequest 的状态。
onreadystatechange
属性定义了一个回调函数,当 readyState 改变时执行该函数。
status
属性和 statusText
属性保存 XMLHttpRequest 对象的状态。
属性 | 描述 |
---|---|
onreadystatechange | 定义当 readyState 属性改变时调用的函数。 |
readyState |
保存 XMLHttpRequest 的状态。
|
status |
返回请求的状态号
如需完整列表请访问 Http 消息参考手册 |
statusText | 返回状态文本(比如 "OK" 或 "Not Found")。 |
每次 readyState 改变时都会调用 onreadystatechange 函数。
当 readyState 为 4
且 status 为 200
时,响应就绪:
实例
function loadDoc() { const xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { document.getElementById("demo").innerHTML = this.responseText; } }; xhttp.open("GET", "ajax_info.txt"); xhttp.send(); }
onreadystatechange 事件被触发了四次(1-4),每次 readyState 变化一次。