二维码
微世推网

扫一扫关注

当前位置: 首页 » 快闻头条 » 科普 » 正文

Ajax原生XHR对象

放大字体  缩小字体 发布日期:2018-06-04 22:35:16    作者:微世推-实习陈东旭    浏览次数:316
导读

url:文件在服务器上的位置async:布尔值,true表示异步,false表示同步(可选,默认为true)send()方法将请求发送到服务器,有一个可选的参数string,仅用于POST类型的请求。这里主要讨论一下async参数,XMLHttpReq

url:文件在服务器上的位置 async:布尔值,true表示异步,false表示同步(可选,默认为true) send()方法将请求发送到服务器,有一个可选的参数string,仅用于POST类型的请求。   这里主要讨论一下async参数,XMLHttpRequest对象如果要用于AJAX的话,其open()方法的async参数必须设置为true。那如果参数设置为false会有什么样的后果呢?同步请求的后果是:Javascript会等到服务器响应就绪才继续执行。如果是比较大型的请求或者服务器处于繁忙状态,应用程序会挂起或停止。简单点说就是页面会一直卡到响应内容回来才继续运行。   在发送GET请求的时候,可能得到缓存的信息(IE中),导致我们发送的异步请求不能正确的返回我们想要的最新的数据。 方法一:在url中添加一个唯一的ID:(随机数)
这种方式可以避免拿到缓存中的旧消息,但它的每次请求仍然会被浏览器缓存起来,占用浏览器资源。 方法二:用setRequestHeader(header,value)方法向请求添加HTTP头。(关于setRequestHeader在后面讨论)
1 xhr.open("GET","demo.asp",true);
2 xhr.setRequestHeader("If-Modified-Since","0"); //设置浏览器不使用缓存
3 xhr.send();
GET中的url可以拼接字符串从而达到传参,而传送数据一般用POST。 如果我们用POST方法向服务器发送数据,应该这样设置http头。
1 xhr.open("POST","postdemo.asp",true);
2 xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); //否则数据无法被正常接收
3 xhr.send("name=amie"); //send里写要发送的数据
第三步:服务器响应 XMLHttpRequest对象的responseText和responseXML属性分别获得字符串形式的响应数据和XML形式的响应数据 可以在控制台里输出响应 console.log(xhr.responseText); 还有三个关于响应状态的属性也经常用到: readyState:存有XMLHttpRequest的状态。XHR对象会经历5种不同的状态 0:请求未初始化(new完后); 1:服务器连接已建立(对象已创建并初始化,尚未调用send方法); 2:请求已接收; 3:请求处理中; 4:请求已完成,响应就绪; status:(HTTP状态码很多,请自行了解,举例常见的) 200:请求成功 404:未找到页面 onreadystatechange:存储函数(或函数名),每当readyState属性改变时,就会调用该函数。 因此上面那行代码可以改为:
1 xhr.onreadystatechange = function () {
2 if (xhr.readyState == 4 xhr.status == 200) {
3 console.log(xhr.responseText);
4 };

 

关于setRequestHeader 在HTTP协议里,客户端向服务器请求某个网页的时候,需要发送一个HTTP协议的头文件,而XMLHttp就是通过HTTP协议去的网站上的文件数据的,所以也要发送HTTP头给服务器。 发送请求时会默认发一个头文件,如果我们需要修改或添加参数,就需要用到setRequestHeader方法。 1.响应头包含了许多信息,有兴趣的小伙伴可以去了解一下。(HTTP涉及了许多计算机网络的知识)。 2.查看http请求头可以到开发者工具里的Network里查看。

(写在结尾:前端新人一枚~欢迎大家指出错误,谢谢阅览~)

 
(文/微世推-实习陈东旭)
免责声明
• 
本文仅代表发布者:微世推-实习陈东旭个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,需自行承担相应责任。涉及到版权或其他问题,请及时联系我们删除处理邮件:weilaitui@qq.com。
 

Copyright©2015-2025 粤公网安备 44030702000869号

粤ICP备16078936号

微信

关注
微信

微信二维码

WAP二维码

客服

联系
客服

联系客服:

24在线QQ: 770665880

客服电话: 020-82301567

E_mail邮箱: weilaitui@qq.com

微信公众号: weishitui

韩瑞 小英 张泽

工作时间:

周一至周五: 08:00 - 24:00

反馈

用户
反馈