健身 下面流血怎么回事(JS XMLHttpRequest对象详解)
概念
XMLHttpRequest对象 ,顾名思义:是基于XML的HTTP请求,是一个浏览器接口,XMLHttpRequest 用于在后台与服务器交换数据 。
我们通过XMLHttpRequest 可以在不刷新页面的情况下请求特定 URL获取数据 。
创建XMLHttpRequest对象
var xhr = new XMLHttpRequest();建立连接
在 JavaScript 中 ,使用 XMLHttpRequest 对象的 open() 方法可以建立一个 HTTP 请求。
xhr.open(method, url, async, username, password);open方法包含5个参数:
method:HTTP 请求方法 ,必须参数 ,值包括 POST 、GET 和 HEAD ,大小写不敏感 。 url:请求的 URL 字符串 ,必须参数 ,大部分浏览器仅支持同源请求 。 async:指定请求是否为异步方式 ,默认为 true。如果为 false ,当状态改变时会立即调用
onreadystatechange 属性指定的回调函数 。 username:可选参数,如果服务器需要验证 ,该参数指定用户名 ,如果未指定,当服务器需要验证时 ,会弹出验证窗口 。 password:可选参数 ,验证信息中的密码部分,如果用户名为空 ,则该值将被忽略 。建立连接后 ,可以使用 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); //接收数据发送get请求
在 JavaScript 中 ,发送 GET 请求简单 、方便 ,适用于简单字符串 ,不适用于大容量或加密数据。
实现方法:将包含查询字符串的 URL 传入 open() 方法 ,设置第 1 个参数值为 GET 即可 。服务器能够通过查询字符串接收用户信息 。
示例:
<input name="submit" type="button" id="submit" value="向服务器发出请求" /> <script> var xhr = new XMLHttpRequest() //实例化XMLHttpRequest 对象 var b = document.querySelector("#submit"); //给b绑定事件 b.onclick = function (){ //这里使用php进行测试 // "server.php?callback=functionName"查询字符串通过问号?作为前缀附加在 URL 的末尾,发送数据是以连字符&连接的一个或多个名值对。 xhr.open("GET", "server.php?callback=functionName", false); //open方法的async参数如果为false ,表示要求同步响应 ,当状态改变时会立即调用onreadystatechange 属性指定的回调函数 。 xhr.send(null); //发送请求 console.log(xhr.responseText); //接收数据 } </script>发送post请求
在 JavaScript 中,POST 请求允许发送任意类型 、长度的数据 ,多用于表单提交 ,以 send() 方法进行传递
,而不以查询字符串的方式进行传递 。
POST 字符串与 GET 字符串的格式相同。格式如下: send("name1=value1&name2=value2...");示例:
<input name="submit" type="button" id="submit" value="向服务器发出请求" /> <script> var xhr = new XMLHttpRequest() //实例化XMLHttpRequest 对象 var b = document.querySelector("#submit"); b.onclick = function () { xhr.open("POST", "server.php", false); //建立连接 ,要求同步响应 xhr.setRequestHeader (Content-type, application/x-www-form-urlencoded); //设置为表单方式提交 xhr.send("callback=functionName"); //发送请求 console.log(xhr.responseText); //接收数据 } </script>在 open() 方法中 ,设置第一个参数为 POST ,然后使用 setRequestHeader() 方法设置请求消息的内容类型为“application/x-www-form-urlencoded ” ,它表示传递的是表单值.
一般使用 POST 发送请求时都必须使用setRequestHeader()方法将请求消息的内容类型设置为表单类型 ,否则服务器无法识别传递过来的数据 。
异步响应状态readyState
在 JavaScript 中 ,使用 readyState 属性可以实时跟踪异步响应状态 。当该属性值发生变化时 ,会触发 readystatechange 事件 ,调用绑定的回调函数 。readyState 属性值说明如表所示 。
考虑到各种特殊情况 ,更安全的方法是同时监测 HTTP 状态码,只有当 HTTP 状态码为 200 并且readyState属性值为4时 ,说明 HTTP 响应顺利完成 ,那么就可以顺利的安全的读取响应数据 。HTTP状态码:
status 0 代表请求未完成
status 200 代表一个成功的请求.示例:
<input name="submit" type="button" id="submit" value="向服务器发出请求" /> <script> var xhr = new XMLHttpRequest() //实例化XMLHttpRequest 对象 var b = document.querySelector("#submit"); b.onclick = function () { xhr.open("POST", "server.php", true); //建立连接,要求异步响应 xhr.setRequestHeader (Content-type, application/x-www-form-urlencoded); //设置为表单方式提交 xhr.send("callback=functionName"); //发送请求 xhr.onreadystatechange = function () { //绑定响应状态事件监听函数 if (xhr.readyState == 4 && xhr.status == 200) { //监听readyState状态和HTTP状态码 console.log(xhr.responseText); //接收数据 } } } </script>终止请求abort()
使用 abort() 方法可以终止正在进行的请求 。用法为:
xhr.abort(); //终止请求 //当一个请求被终止 ,它的 readyState 将被置为0,并且请求的 status 置为 0 。获取XML数据
XMLHttpRequest 对象通过 responseText 、responseBody 、responseStream 或 responseXML 属性获取响应信息 ,说明如下表所示,它们都是只读属性 。
在实际应用中 ,一般将格式设置为 XML 、HTML 、JSON 或其他纯文本格式 。
具体使用哪种响应格式 ,可以参考下面几条原则。 如果向页面中添加大块数据 ,选择 HTML 格式会比较方便 。 如果需要协作开发 ,且项目庞杂 ,选择 XML 格式会更通用 。 如果要检索复杂的数据 ,且结构复杂 ,那么选择 JSON 格式更加轻便。获取和设置头部信息
HTTP 请求和响应都包含一组头部消息 。
获取头部消息可以使用下面两个方法 。
getAllResponseHeaders():获取响应的 HTTP头部消息。 getResponseHeader(“Header-name ”):获取指定的 HTTP 头部消息 。示例:
var xhr = new XMLHttpRequest; xhr.open("GET", "server.txt", true); xhr.onreadystatechange = function () { if (xhr.readyState == 4 && xhr.status == 200) { console.log(xhr.getAllResponseHeaders()); } } xhr.send(null);如果要获取指定的某个头部消息.
示例:获取 Content-Type 头部的值 ,可以这样设计 。
console.log(xhr.getResponseHeader("Content-Type"));设置头部信息使用setResponseHeader()方法
用法如下:
xhr.setResponseHeader("Header-name", "value");示例:使用 POST 方法传递表单数据 ,可以设置如下头部消息 。
xhr.setResponseHeader("Content-Type", "application/x-www-form-urlencoded");创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!