Arm*_*nco 1 ajax jquery xmlhttprequest http-headers jqxhr
我注意到使用IE8和IE9,如果我使用带有POST和PUT谓词的jQuery.ajax()调用我的RESTful API ,那么我不会在jqXHR中找回任何响应头.但是,GET请求按预期工作.
此行为与所有其他浏览器不同.我已经确认Chrome,FF,Opera和Safari都会在POST和PUT请求的响应中返回完整的预期标头集.只有IE8和IE9似乎在地板上扔标题.(我没有检查的一件事是HEAD请求会发生什么.)
我已经用Fiddler验证了标题实际上是通过线路进行的,所以问题出在jQuery本身或IE8和IE9上.
这是一个已知的问题?如果是这样,是否有解决方法.我可以在jQuery中重载/覆盖某些内容以保留POST和PUT后的头文件吗?我目前的解决方法是在成功回调中使用GET简单地重新获取修改后的数据,因为IE8和IE9不会混淆GET操作的头文件.
这是我基于jQuery的主要AJAX工作方法的片段:
$.ajax({
url: String.format(um.proxy.url, url),
type: ajaxParams.verb,
contentType: "application/json; charset=utf-8",
dataType: "json",
data: String.format('{0}', ajaxParams.jsonData),
headers: mapOfHeaders,
success: function (data, textStatus, jqXHR) {
//...
},
error: function (msg, textStatus, errorThrown) {
//...
}
});
Run Code Online (Sandbox Code Playgroud)
事实证明,这是IE的所有当前风格(7,8和9)的已知问题.如果响应代码是204,那么IE只会抛出所有标题.对于像我这样编写需要最新eTag进行并发检查的纯AJAX实现的人来说,IE杀死了纯AJAX方法,迫使我立即进行GET来获取当前的eTag.:捂脸:
以下是我设法挖掘的几篇文章:
在Internet Explorer中的HTTP无内容响应中缺少ETag标头
http://dalelane.co.uk/blog/?p=2043
response.headers.ETag undefined
http://datajs.codeplex.com/discussions/398295
一个部分解决方法是嗅探IE,然后立即执行HEAD请求以获取ETag,但这种方法的问题是,如果有人设法潜入你并更新记录,你将获得eTag因为她的变化,不是你的.所以这不是一个可接受的解决方法.
所以,我嗅了IE并立即进行GET.否则对于所有其他浏览器,我只需使用jQuery的jqXHR.getResponseHeader(namespace.constants.headers.eTag)来获取eTag.
| 归档时间: |
|
| 查看次数: |
3137 次 |
| 最近记录: |