xmlhttprequest
XMLHttpRequest(XHR)是Web开发中的一个核心组件,它允许JavaScript与服务器进行异步数据通信,无需刷新整个页面。这个技术极大地提升了用户体验,因为它可以在后台加载数据,而用户可以继续在网页上操作。 **基本使用** 创建XMLHttpRequest对象通常通过以下方式实现: ```javascript var xhr = new XMLHttpRequest(); ``` 在早期版本的Internet Explorer中,需要使用ActiveXObject来创建: ```vbscript Dim xhr Set xhr = New MSXML2.XMLHTTP30 ``` **发起请求** XMLHttpRequest对象通过`open()`方法发起HTTP请求。它接受三个参数:请求方法(如"GET"或"POST"),URL,以及一个布尔值表示是否异步执行。例如: ```javascript xhr.open('GET', 'http://localhost/books.xml', true); ``` **发送数据** 在调用`open()`后,使用`send()`方法发送请求。如果请求方法是"POST",则可以传递数据: ```javascript xhr.send(null); // GET请求 xhr.send('param1=value1¶m2=value2'); // POST请求 ``` **接收响应** XMLHttpRequest对象有多个属性用于获取服务器响应。`responseText`返回文本格式的响应,`responseXML`返回XML文档对象,`status`表示HTTP状态码,`statusText`是状态描述。 监听`onreadystatechange`事件,可以知道请求的进度。当`readyState`属性变化时,这个事件会被触发。`readyState`有5个可能的值,表示请求的不同阶段: 1. UNSENT (0) - 对象已创建,但尚未调用`open()`。 2. OPENED (1) - `open()`已被调用。 3. HEADERS_RECEIVED (2) - 请求已发送,头部信息已接收。 4. LOADING (3) - 正在接收数据。 5. DONE (4) - 数据接收完毕,可以访问`responseText`和`responseXML`。 示例: ```javascript xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { console.log(xhr.responseText); } }; xhr.open('GET', 'http://localhost/books.xml', true); xhr.send(); ``` **设置请求头** 使用`setRequestHeader()`方法可以设置HTTP请求头。例如,发送POST请求时设置Content-Type: ```javascript xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); ``` **取消请求** 如果需要取消正在执行的请求,可以调用`abort()`方法。 **总结** XMLHttpRequest是实现AJAX(Asynchronous JavaScript and XML)的核心技术,尽管现在更多的数据交换格式是JSON而非XML。它使得网页可以与服务器进行动态交互,无需用户感知,提升了Web应用的性能和用户体验。在现代Web开发中,虽然fetch API和各种库(如jQuery、axios等)提供了更友好的接口,但XMLHttpRequest仍然是理解网络通信和异步编程的基础。