XMLHttpRequest 对象用于与服务器交换数据。
为了向服务器发送请求,我们使用 XMLHttpRequest 对象的 open() 和 send() 方法:
xhttp.open("GET", "ajax_info.txt", true);
xhttp.send();
Method | Description |
---|---|
open(method, url, async) | Specifies the type of request method: the type of request: GET or POST url: the server (file) location async: true (asynchronous) or false (synchronous) |
send() | Sends the request to the server (used for GET) |
send(string) | Sends the request to the server (used for POST) |
GET 比 POST 更简单、更快,并且可以在大多数情况下使用。
但是,在以下情况下请始终使用 POST 请求:
一个简单的 GET 请求:
在上面的示例中,您可能会得到缓存的结果。为了避免这种情况,请向 URL 添加唯一 ID:
如果要使用 GET 方法发送信息,请将信息添加到 URL 中:
一个简单的 POST 请求:
要像 HTML 表单一样 POST 数据,请使用 setRequestHeader() 添加 HTTP 标头。在send()方法中指定要发送的数据:
xhttp.open("POST", "demo_post2.html", true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send("fname=Henry&lname=Ford");
亲自试一试 »
Method | Description |
---|---|
setRequestHeader(header, value) | Adds HTTP headers to the request header: specifies the header name value: specifies the header value |
open() 方法的 url 参数是服务器上文件的地址:
xhttp.open("GET", "ajax_test.html", true);
该文件可以是任何类型的文件,例如 .txt 和 .xml,也可以是服务器脚本文件,例如 .html 和 .html(可以在发回响应之前在服务器上执行操作)。
服务器请求应该异步发送。
open() 方法的 async 参数应设置为 true:
xhttp.open("GET", "ajax_test.html", true);
通过异步发送,JavaScript 不必等待服务器响应,而是可以:
使用 XMLHttpRequest 对象,您可以定义一个在请求收到响应时执行的函数。
该函数定义在就绪状态改变XMLHttpResponse 对象的属性:
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("demo").innerHTML = this.responseText;
}
};
xhttp.open("GET", "ajax_info.txt", true);
xhttp.send();
亲自试一试 »
上面示例中使用的 "ajax_info.txt" 文件是一个简单的文本文件,如下所示:
<h1>AJAX</h1>
<p>AJAX is not a programming language.</p>
<p>AJAX is a technique for accessing web servers from a web page.</p>
<p>AJAX stands for Asynchronous JavaScript And XML.</p>
您将在后面的章节中了解有关 onreadystatechange 的更多信息。
要执行同步请求,请将 open() 方法中的第三个参数更改为 false:
xhttp.open("GET", "ajax_info.txt", false);
有时 async = false 用于快速测试。您还会在较旧的 JavaScript 代码中找到同步请求。
由于代码将等待服务器完成,因此不需要 onreadystatechange 函数:
xhttp.open("GET", "ajax_info.txt", false);
xhttp.send();
document.getElementById("demo").innerHTML = xhttp.responseText;
亲自试一试 »
不建议使用同步 XMLHttpRequest (async = false),因为 JavaScript 将停止执行,直到服务器响应准备就绪。如果服务器繁忙或缓慢,应用程序将挂起或停止。
同步 XMLHttpRequest 正在从 Web 标准中删除,但这个过程可能需要很多年。
鼓励现代开发工具对使用同步请求发出警告,并可能在发生时抛出 InvalidAccessError 异常。
截取页面反馈部分,让我们更快修复内容!也可以直接跳过填写反馈内容!