这段时间重新理了一下ajax技术,并重新理了一下XMLHttpRequest 对象,发现还是有几个地方比较容易忘记或者是需要注意的几个地方。
用一句话来总结两者的关系:我们使用XMLHttpRequest对象来发送一个Ajax请求。
XMLHttpRequest Level 2 使用指南
,文章中对新增的功能都有具体代码示例。
1
|
void setRequestHeader(DOMString header, DOMString value);
|
-
W3C的 xhr 标准中做了限制
-
对于跨域请求,客户端允许获取的response header字段只限于“
simple response header
”和“
Access-Control-Expose-Headers
” ,这个是因为
W3C 的 cors 标准对于跨域请求也做了限制
simple response header 只有这6个基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。
如果想拿到其他字段,就必须在Access-Control-Expose-Headers里面指定,这个头部是服务端在返回跨域响应的时候,所返回的一个可选的头部。
比如以php来说,如果在跨域的时候,设置这个响应头部的时候:
1
|
$response->header('Access-Control-Expose-Headers', 'x-redirect');
|
那么我们就可以通过 xhr.getResponseHeader(“x-redirect”) 来获取这个服务端返回的自定义头部
-
ie8,ie9 使用 XDomainRequest 进行跨域
,至于ie8以下的异步跨域请求,那就不能用ajax的方式了,得用其他的方式,比如如果是get的话,那么就可以用jsonp来处理,可以参照这个:
前端工具集(1) -- jsonp原生实现
参照的资料:
如果想快速又比较全面的了解xhr对象,那么就看这个
你真的会使用XMLHttpRequest吗?
想真正搞懂XMLHttpRequest,最靠谱的方法还是看
W3C的xhr 标准
;
想了解跨域请求,则可以参考
W3C的 cors 标准
;