@demonly
2017-10-13T11:56:20.000000Z
字数 2819
阅读 930
JavaScript
open()方法启动一个 http 请求,它接收三个参数,要发送的请求类型、请求的 URL 和表示是否异步发送的布尔值。open() 方法仅仅是启动一个请求,并不会发送。请求的 URL 必须在同一个域中,否则会引发安全错误。
send()方法发送请求,它接收一个参数,即作为请求主体发送的数据,如果不需要发送数据,那么必须传入 null。同步的请求会阻塞 JavaScript 的执行,直到服务器响应请求之后。
abort()方法在接收到响应之前取消异步请求。
收到服务器的响应之后,响应的数据会填充为 XHR 对象的属性。
XHR 对象的 readyState 属性表示请求/响应过程的当前活动阶段,这个属性可能是以下值。当这个状态改变时,会触发 XHR 对象的 readystatechange 事件。
HTTP 状态
其中 304 表示请求的资源没有被修改,也可以认为请求成功了。
setRequestHeader() 方法可以设置自定义的请求头部信息。这个方法必须在调用 open()方法之后,调用 send()方法之前调用。
默认情况下会发送下列头部信息
FormData 对象为序列化表单以及创建于表单格式相同的数据提供了便利。在创建 FormData 对象的时候可以直接传入一个表单元素。
append() 方法接收两个参数,键和值。
创建了 FormData 对象后,可以将它直接传给 send()方法。
XHR 有 timeout 属性,表示请求在等待响应多少毫秒之后就终止,终止后会触发 timeout 事件。超时终止的时候 readyState 会改变为4,因此会触发 readystatechange 事件,但是超市终止之后再访问 status 属性就会导致错误。
overrideMimeType() 用于重写 XHR 响应的 MIME 类型,这个方法必须在 send() 方法调用之前调用。
progress 的事件对象包含三个额外的属性:lengthComputable、position 和 totalSize。其中 lengthComputable 是一个表示进度信息是否可用的布尔值,position 表示已经接收的字节数,totalSize 表示预期字节数。
为了实现跨域资源共享,可以在服务器端设置 Access-Control-Allow-Origin。然后在请求头中注明 Origin。
JSONP
JSON 的语法可以表达一下三种类型的值
JSON 不支持变量、函数或对象实例。
JSON 中表示对象的方式与 JavaScript 略有不同。
JavaScript:
var object = {
name: "Nicholas",
age: 29
}
JSON
{
"name": "Nicholas",
"age": 29
}
JSON 的属性名必须要加双引号,JSON 中没有分号。
JSON 数组采用的是 JavaScript 中的数组字面量形式。
JSON 对象有两个方法:stringfy()和 prase()。这两个方法分别用于把 JavaScript 对象序列化为 JSON 字符串和把 JSON 字符串解析为原生 JavaScript 值。
var object = {
name: "Nicholas",
age: 29
}
var jsontext = JSON.stringfy(object)
在使用 stringfy()序列化 JavaScript 对象时默认不会包含空格字符和缩进。同时所有的函数以及原型都会被忽略,值为 undefined 的属性也会被跳过。
stringfy()方法还可以另外接受两个参数,第一个是过滤器,可以是一个数组,也可以是一个函数;第二个参数是一个选项表示是否在 JSON 字符串中保留缩进。
过滤结果
如果过滤器参数是数组,那么输出的结果中将只包含数组中列出的属性。
如果第二个参数是函数,那么会用函数对数据逐个处理。传入的函数接受两个参数,属性名和属性值,最后返回相应键的值,如果返回 undefined 相应的属性就会被跳过。
字符串缩进
如果第三个参数是一个数值,那么它将表示每个级别缩进的空格数,同时属性间也会被自动插入换行符。
如果第三个参数是一个字符串,那么这个字符串将被设置为缩进字符串。
var jsontext = JSON.stringfy(object, null, "--")
toJSON
可以给对象添加 toJSON 方法来自定义序列化。当对象中存在 toJSON()方法时,将其传入 stringfy 方法将会自动调用 toJSON 方法。
var object = {
name: "Nicholas",
age: 29,
toJSON: function(){
return this.tittle;
}
};
var jsontext = JSON.stringfy(object);