JS XMLHttpRequest入门教程
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
在 Javascript 中,XMLHttpRequest 是客户端的一个 API,它为浏览器与服务器通信提供了一个便捷通道。现代浏览器都支持 XMLHttpRequest API,如 IE 7+、Firefox、Chrome、Safari 和 Opera。创建 XMLHttpRequest 对象XMLHttpRequest 用于在后台与服务器交换数据。创建 XMLHttpRequest 对象的方法如下:var xhr = new XMLHttpRequest (); IE 5.0 版本开始以 ActiveX 组件形式支持 XMLHttpRequest,IE 7.0 版本开始标准化 XMLHttpRequest。不过所有浏览器实现的 XMLHttpRequest 对象都提供相同的接口和用法。 示例下面示例使用工厂模式把定义 XMLHttpRequest 对象进行封装,这样只需要调用 creatXHR() 方法就可以返回一个 XMLHttpRequest 对象。 //创建XMLHttpRequest 对象 //参数:无 //返回值:XMLHttpRequest 对象 function createXHR () { var XHR = [ //兼容不同浏览器和版本得创建函数数组 function () { return new XMLHttpRequest () }, function () { return new ActiveXObject ("Msxml2.XMLHTTP") }, function () { return new ActiveXObject ("Msxml3.XMLHTTP") }, function () { return new ActiveXObject ("Microsoft.XMLHTTP") } ]; var xhr = null; //尝试调用函数,如果成功则返回XMLHttpRequest对象,否则继续尝试 for (var i = 0; i < XHR.length; i ++) { try { xhr = XHR[i](); } catch(e) { continue //如果发生异常,则继续下一个函数调用 } break; //如果成功,则中止循环 } return xhr; //返回对象实例 } 建立连接在 Javascript 中,使用 XMLHttpRequest 对象的 open() 方法可以建立一个 HTTP 请求。用法如下:xhr.open(method, url, async, username, password); 其中 xhr 表示 XMLHttpRequest 对象,open() 方法包含 5 个参数,说明如下:
建立连接后,可以使用 send() 方法发送请求。用法如下: xhr.send(body); 参数 body 表示将通过该请求发送的数据,如果不传递信息,可以设置为 null 或者省略。发送请求后,可以使用 XMLHttpRequest 对象的 responseBody、responseStream、responseText 或 responseXML 属等待接收响应数据。 示例下面示例简单演示了如何实现异步通信的方法。 var xhr = creatXHR(); //实例化XMLHttpRequest 对象 xhr.open ("GET", "server.txt", false"); //建立连接xhr.send(null); //发送请求 console.log(xhr.responseText); //接收数据 Hello World //服务器端脚本 发送 GET 请求在 Javascript 中,发送 GET 请求简单、方便,适用于简单字符串,不适用于大容量或加密数据。实现方法:将包含查询字符串的 URL 传入 open() 方法,设置第 1 个参数值为 GET 即可。服务器能够通过查询字符串接收用户信息。示例下面示例以 GET 方式向服务器传递一条信息 callback=functionName。 <input name="submit" type="button" id="submit" value="向服务器发出请求" /> <script> window.onload = function () { //页面初始化 var b = document.getElementsByTagName("input")[0]; b.onclick = function () { var url = "server.php?callback=functionName"; //设置查询字符串 var xhr = createXHR(); //实例化XMLHttpRequest 对象 xhr.open("GET", url, false); //建立连接,要求同步响应 xhr.send(null); //发送请求 console.log(xhr.responseText); //接收数据 } } </script> <?php echo $_GET["callback"]; ?> 查询字符串通过问号 ? 作为前缀附加在 URL 的末尾,发送数据是以连字符& 连接的一个或多个名值对。发送 POST 请求在 Javascript 中,POST 请求允许发送任意类型、长度的数据,多用于表单提交,以 send() 方法进行传递,而不以查询字符串的方式进行传递。POST 字符串与 GET 字符串的格式相同。格式如下:send("name1=value1&name2=value2..."); 示例使用 POST 方法向服务器传递数据。 window.onload = function () { //页面初始化 var b = document.getElementsByTagName("input")[0]; b.onclick = function () { var url = "server.php"; //设置请求的地址 var xhr = createXHR(); //实例化XMLHttpRequest 对象 xhr.open("POST", url, false); //建立连接,要求同步响应 xhr.setRequestHeader ('Content-type', 'application/x-www-form-urlencoded'); //设置为表单方式提交 xhr.send("callback=functionName"); //发送请求 console.log(xhr.responseText); //接收数据 } } 在服务器端设计接收 POST 方式传递的数据,并进行响应。 <?php echo $_POST["callback"]; ?> 异步响应状态在 Javascript 中,使用 readyState 属性可以实时跟踪异步响应状态。当该属性值发生变化时,会触发 readystatechange 事件,调用绑定的回调函数。readyState 属性值说明如表所示。
考虑到各种特殊情况,更安全的方法是同时监测 HTTP 状态码,只有当 HTTP 状态码为 200 时,才说明 HTTP 响应顺利完成。 示例下面示例中,修改请求为异步响应请求,然后通过 status 属性获取当前的 HTTP 状态码。如果 readyState 属性值为 4,且 status(状态码)属性值为 200,则说明 HTTP 请求和响应过程顺利完成,这时可以安全、异步的读取数据。 window.onload = function () { //页面初始化 var b = document.getElementsByTagName("input")[0]; b.onclick = function () { var url = "server.php"; //设置请求的地址 var xhr = createXHR(); //实例化XMLHttpRequest对象 xhr.open("POST", url, true); //建立间接,要求异步响应 xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); //设置为表单方式提交 xhr.onreadystatechange = function () { //绑定响应状态事件监听函数 if (xhr.readyState == 4) { //监听readyState状态 if (xhr.status == 200 || xhr.status == 0) { //监听HTTP状态码 console.log(xhr.responseText); //接收数据 } } } xhr.send("callback=functionName"); //发送请求 } } 中止请求使用 abort() 方法可以中止正在进行的请求。用法如下:xhr.onreadystatechange = function () {}; //清理事件响应函数 在调用 abort() 方法前,应先清除 onreadystatechange 事件处理函数,因为 IE 和 Mozilla 在请求中止后也会激活这个事件处理函数。如果给 onreadystatechange 属性设置为 null,则 IE 会发生异常,所以为它设置一个空函数。 获取和设置头部消息HTTP 请求和响应都包含一组头部消息,获取和设置头部消息可以使用下面两个方法。
示例下面示例将获取 HTTP 响应的所有头部消息。 var xhr = createXHR(); var url = "server.txt"; xhr.open("GET", url, true); xhr.onreadystatechange = function () { if (xhr.readyState == 4 && xhr.status == 200) { console.log(xhr.getAllResponseHeaders()); } } xhr.send(null); console.log(xhr.getResponseHeader("Content-Type")); xhr.setResponseHeader("Header-name", "value"); xhr.setResponseHeader("Content-Type", "application/x-www-form-urlencoded"); http://c.biancheng.net/view/5995.html 该文章在 2023/5/11 11:08:34 编辑过 |
相关文章
正在查询... |