JavaScript基础笔记(十二)Ajax
Ajax
一、XMLHttpRequest对象
一)XHR用法
var xhr = new XMLHttpRequest();
//open()方法,参数一:发送方法,参数二:请求的URL,参数三:是否发送异步请求
//调用open()方法不会真正发送请求,只是启动一个请求以备发送。
xhr.open('get', 'test.txt', false);
//send()方法接受一个参数,即作为请求主体要发送的数据,如果无数据也要传入null
xhr.send(null);
//在收到请求后响应的数据会自动填充到XHR对象的属性中
/*
* 相关属性介绍如下:
* 1)responseText:服务器返回的文本
* 2)responseXML:响应的XML
* 3)status:响应的状态,200表示成功,此时responseText和responseXML
* 都可以访问了,304表示访问的资源没有被修改,可以使用直接使用浏览器缓存。
* 4)statusText:状态的说明
*
* */
当我们发送异步请求时可以检测xhr对象的readyState,以表示请求的状态属性其值可以是:
1)0:尚未调用open()方法
2)1:已经调用open()方法,但还没有调用send()方法
3)2:已经调用send()方法,但还没有接收到响应
4)3:已经接收到部分响应数据
5)4:已经接收到全部响应数据
readyState属性的值由一个变为另一个都会触发readystatechange事件。
注意:必须在open()调用之前定义readystatechange事件处理程序才能确保跨浏览器兼容问题。
var xhr = createXHR();
xhr.onreadystatechange = function(){
if (xhr.readyState == 4){
if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){
alert(xhr.responseText);
} else {
alert("Request was unsuccessful: " + xhr.status);
}
}
};
xhr.open("get", "example.txt", true);
xhr.send(null);
这个例子在 onreadystatechange 事件处理程序中使用了 xhr 对象,没有使用
this 对象,原因是 onreadystatechange 事件处理程序的作用域问题。如果使用
this 对象,在有的浏览器中会导致函数执行失败,或者导致错误发生。因此,使用
实际的 XHR 对象实例变量是较为可靠的一种方式。
另外,在接收到响应之前还可以调用 abort()方法来取消异步请求,如下所示:
xhr.abort();
调用这个方法后, XHR 对象会停止触发事件,而且也不再允许访问任何与响应有关的对象属性。在
终止请求之后,还应该对 XHR 对象进行解引用操作。由于内存原因,不建议重用 XHR 对象。
二)HTTP头部信息
Accept:浏览器能够处理的内容类型。
Accept-Charset:浏览器能够显示的字符集。
Accept-Encoding:浏览器能够处理的压缩编码。
Accept-Language:浏览器当前设置的语言。
Connection:浏览器与服务器之间连接的类型。
Cookie:当前页面设置的任何 Cookie。
Host:发出请求的页面所在的域 。
Referer:发出请求的页面的 URI。注意, HTTP 规范将这个头部字段拼写错了,而为保证与规
范一致,也只能将错就错了。(这个英文单词的正确拼法应该是 referrer。)
User-Agent:浏览器的用户代理字符串。
1)setRequestHeader()方法可以设置自定义的请求头部信息。这个方法接受两个参数:头部字段
的名称和头部字段的值。要成功发送请求头部信息,必须在调用 open()方法之后且调用 send()方法
之前调用 setRequestHeader()
2)getAllResponseHeaders()方法则可以取得一个包含所有头部信息的长字符串
三)GET请求
使用 GET 请求经常会发生的一个错误,就是查询字符串的格式有问题。查询字符串中每个参数的名
称和值都必须使用 encodeURIComponent()进行编码,然后才能放到 URL 的末尾;而且所有名-值对
儿都必须由和号(&)分隔
四)POST请求
默认情况下,服务器对 POST 请求和提交 Web 表单的请求并不会一视同仁。因此,服务器端必须有
程序来读取发送过来的原始数据,并从中解析出有用的部分。不过,我们可以使用 XHR 来模仿表单提
交:首先将 Content-Type 头部信息设置为 application/x-www-form-urlencoded,也就是表单
提交时的内容类型,其次是以适当的格式创建一个字符串
POST 数据的格式与查
询字符串格式相同。如果需要将页面中表单的数据进行序列化,然后再通过 XHR 发送到服务器,那么
就可以使用 serialize()函数来创建这个字符串
xhr.open("post", "postexample.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
var form = document.getElementById("user-info");
xhr.send(serialize(form));
二、XMLRequest 2级
一)FormData
FormData用于序列化表单以及创建与表单相同的格式的数据(用于通过XHR传输)
var data = new FormData();
//append(name, value)分别对应表单中的键和值
data.append("name", "Jerry");
var data2 = new FormData(document.forms[0]);
//创建了formData后可以将他传给send()方法
二)超时设定
XHR的timeout属性,可以设置超时时间,请求在等待多少秒无响应后就终止。超时时会触发ontimeout事件。
JavaScript基础笔记(十二)Ajax的更多相关文章
- javascript基础拾遗(十二)
1.javascript的单线程特性 在javascript中,所有的代码都是单线程的 因此所有的网络操作,浏览器事件,都必须是异步执行的,异步执行的逻辑是回调. function callback( ...
- JavaScript学习笔记(十二) 回调模式(Callback Pattern)
函数就是对象,所以他们可以作为一个参数传递给其它函数: 当你将introduceBugs()作为一个参数传递给writeCode(),然后在某个时间点,writeCode()有可能执行(调用)intr ...
- JavaScript基础笔记(二)变量、作用域和内存问题
变量.作用域和内存问题 一.基本类型和引用类型的值 基本类型值:简单的数据段 引用类型值:由多个值构成的对象 基本类型是按值访问的,引用类型是按引用访问的. 不能给基本类型的值添加属性,尽管不会报错. ...
- JavaScript基础笔记二
一.函数返回值1.什么是函数返回值 函数的执行结果2. 可以没有return // 没有return或者return后面为空则会返回undefined3.一个函数应该只返回一种类型的值 二.可变 ...
- Bootstrap <基础三十二>模态框(Modal)插件
模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用 ...
- JavaScript基础笔记一
一.真假判断 真的:true.非零数字.非空字符串.非空对象 假的:false.数字零.空字符串.空对象.undefined 例: if(0){ alert(1) }else{ alert(2) } ...
- Javascript基础回顾 之(二) 作用域
本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...
- 《C++游戏开发》笔记十二 战争迷雾:初步实现
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9475979 作者:七十一雾央 新浪微博:http:/ ...
- python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL
python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...
- Go语言学习笔记十二: 范围(Range)
Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...
随机推荐
- OrCAD Capture CIS 16.6 在原理图页面内放置图片
OrCAD Capture CIS 16.6 菜单:Place > Picture... 在Place Picture窗口中,文件类型选择All Files (*.*),接着选择需要插入的图片, ...
- axure—日期函数
日期函数 日期函数中实现倒计时的关键点:1)gettime()函数可以取到1970年1月1日的时间,我们用倒计时结束的时间减去当前时间就能得到倒计时需要循环显示的所有时间.2)此处的“d”是倒计时结束 ...
- springboot配置Druid监控
整体步骤: (1) —— Druid简单介绍,具体看官网: (2) —— 在pom.xml配置druid依赖包: (3) —— 配置application.propertie ...
- docker挂载点泄露问题
本来以为我不会遇到. 结果还是遇到了. 现象为k8s delete pod时,系统一直显示Terminatiing,无论多久都不能正常. 以下两个帖子大概说明了是怎么回事. https://blog. ...
- Idea的快捷键,瞎摸索,开心就好,哈哈哈
前言:如果你有强迫症,换了一个编辑器,最痛苦莫过于快捷键,不顺手了.这里自己瞎摸索的快捷键,贴一下,这里主要以实际应用为主,因为大量介绍的网上已经很多很多,So基本的不再叙述. 分享一下比较不错的Id ...
- JavaScript学习:取数组中最大值和最小值
在实际业务中有的时候要取出数组中的最大值或最小值.但在数组中并没有提供arr.max()和arr.min()这样的方法.那么是不是可以通过别的方式实现类似这样的方法呢?那么今天我们就来整理取出数组中最 ...
- Elasticsearch snapshot 备份的使用方法 【备忘】
常见的数据库都会提供备份的机制,以解决在数据库无法使用的情况下,可以开启新的实例,然后通过备份来恢复数据减少损失.虽然 Elasticsearch 有良好的容灾性,但由于以下原因,其依然需要备份机制. ...
- JSP基础知识➣结构及生命周期(一)
概述 网络服务器需要一个JSP引擎,也就是一个容器来处理JSP页面.容器负责截获对JSP页面的请求.本教程使用内嵌JSP容器的Apache来支持JSP开发. JSP容器与Web服务器协同合作,为JSP ...
- ArcObjects 中连接geodatabase
参考资料: 1. http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/d/0001000003s8 ...
- Codeforces 1136E Nastya Hasn't Written a Legend 线段树
vp的时候没码出来.. 我们用set去维护, 每一块区域, 每块区域内的元素与下一个元素的差值刚好为ki,每次加值的时候我们暴力合并, 可以发现我们最多合并O(n)次. 然后写个线段树就没了. #in ...