[关闭]
@demonly 2017-10-13T11:56:20.000000Z 字数 2819 阅读 930

Ajax

JavaScript


XMLHttpRequest 对象

用法

open()方法启动一个 http 请求,它接收三个参数,要发送的请求类型、请求的 URL 和表示是否异步发送的布尔值。open() 方法仅仅是启动一个请求,并不会发送。请求的 URL 必须在同一个域中,否则会引发安全错误。

send()方法发送请求,它接收一个参数,即作为请求主体发送的数据,如果不需要发送数据,那么必须传入 null。同步的请求会阻塞 JavaScript 的执行,直到服务器响应请求之后。

abort()方法在接收到响应之前取消异步请求。

收到服务器的响应之后,响应的数据会填充为 XHR 对象的属性。

XHR 对象的 readyState 属性表示请求/响应过程的当前活动阶段,这个属性可能是以下值。当这个状态改变时,会触发 XHR 对象的 readystatechange 事件。

HTTP 状态

其中 304 表示请求的资源没有被修改,也可以认为请求成功了。

HTTP 头部信息

setRequestHeader() 方法可以设置自定义的请求头部信息。这个方法必须在调用 open()方法之后,调用 send()方法之前调用。

默认情况下会发送下列头部信息

XMLHttpRequest 2级

FormData

FormData 对象为序列化表单以及创建于表单格式相同的数据提供了便利。在创建 FormData 对象的时候可以直接传入一个表单元素。

append() 方法接收两个参数,键和值。

创建了 FormData 对象后,可以将它直接传给 send()方法。

超时设定

XHR 有 timeout 属性,表示请求在等待响应多少毫秒之后就终止,终止后会触发 timeout 事件。超时终止的时候 readyState 会改变为4,因此会触发 readystatechange 事件,但是超市终止之后再访问 status 属性就会导致错误。

overrideMimeType() 方法

overrideMimeType() 用于重写 XHR 响应的 MIME 类型,这个方法必须在 send() 方法调用之前调用。

进度事件

progress 的事件对象包含三个额外的属性:lengthComputable、position 和 totalSize。其中 lengthComputable 是一个表示进度信息是否可用的布尔值,position 表示已经接收的字节数,totalSize 表示预期字节数。

跨域资源共享

为了实现跨域资源共享,可以在服务器端设置 Access-Control-Allow-Origin。然后在请求头中注明 Origin。

JSONP

JSON

语法

JSON 的语法可以表达一下三种类型的值

JSON 不支持变量、函数或对象实例。

简单值

对象

JSON 中表示对象的方式与 JavaScript 略有不同。
JavaScript:

  1. var object = {
  2. name: "Nicholas",
  3. age: 29
  4. }

JSON

  1. {
  2. "name": "Nicholas",
  3. "age": 29
  4. }

JSON 的属性名必须要加双引号,JSON 中没有分号。

数组

JSON 数组采用的是 JavaScript 中的数组字面量形式。

解析与序列化

JSON 对象

JSON 对象有两个方法:stringfy()和 prase()。这两个方法分别用于把 JavaScript 对象序列化为 JSON 字符串和把 JSON 字符串解析为原生 JavaScript 值。

  1. var object = {
  2. name: "Nicholas",
  3. age: 29
  4. }
  5. var jsontext = JSON.stringfy(object)

在使用 stringfy()序列化 JavaScript 对象时默认不会包含空格字符和缩进。同时所有的函数以及原型都会被忽略,值为 undefined 的属性也会被跳过。

序列化选项

stringfy()方法还可以另外接受两个参数,第一个是过滤器,可以是一个数组,也可以是一个函数;第二个参数是一个选项表示是否在 JSON 字符串中保留缩进。

  1. var object = {
  2. name: "Nicholas",
  3. age: 29,
  4. toJSON: function(){
  5. return this.tittle;
  6. }
  7. };
  8. var jsontext = JSON.stringfy(object);
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注