gpt4 book ai didi

带有 POST 或 PUT 的 jQuery.ajax 没有 IE8 和 IE9 的响应 header

转载 作者:行者123 更新时间:2023-12-01 06:52:36 26 4
gpt4 key购买 nike

我注意到,对于 IE8 和 IE9,如果我使用带有 POSTPUT 动词的 jQuery.ajax() 调用我的 RESTful API,那么我不会返回 jqXHR 中的任何响应 header 。但是,GET 请求按预期工作。

此行为与所有其他浏览器不同。我已经验证 Chrome、FF、Opera 和 Safari 都在 POST 和 PUT 请求的响应中返回完整的预期 header 集。只有 IE8 和 IE9 似乎将标题扔到了地板上。 (我没有检查的一件事是 HEAD 请求会发生什么。)

我已经使用 Fiddler 验证了 header 实际上是通过网络实现的,因此问题要么出在 jQuery 本身,要么出在 IE8 和 IE9。

这是一个已知问题吗?如果是这样,有没有解决方法。我可以重载/覆盖 jQuery 中的某些内容以保留 POST 和 PUT 之后的 header 吗?我当前的解决方法是简单地使用成功回调中的 GET 重新获取修改后的数据,因为 IE8 和 IE9 不会混淆 GET 操作的 header 。

这是我基于 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) {
//...
}
});

最佳答案

事实证明,这是当前所有版本 IE(7、8 和 9)的一个已知问题。如果响应代码是 204,那么 IE 就会简单地将所有 header 扔到地上。对于像我这样编写需要最新 eTag 进行并发检查的纯 AJAX 实现的人来说,IE 会放弃纯 AJAX 方法并强制我立即执行 GET 来获取当前 eTag。 :捂脸:

以下是我设法挖掘的几篇文章:

Internet Explorer 中的 HTTP 无内容响应中缺少 ETag header

http://dalelane.co.uk/blog/?p=2043

response.headers.ETag 未定义

http://datajs.codeplex.com/discussions/398295

一个部分解决方法是嗅探 IE,然后立即执行 HEAD 请求来获取 ETag,但这种方法的问题是,如果有人设法在您之前潜入并更新记录,您将被获取更改的电子标签,而不是的更改。所以这不是一个可接受的解决方法。

因此,我嗅探 IE 并立即执行 GET。否则,对于所有其他浏览器,我只需使用 jQuery 的 jqXHR.getResponseHeader(namespace.constants.headers.eTag) 来获取 eTag。

关于带有 POST 或 PUT 的 jQuery.ajax 没有 IE8 和 IE9 的响应 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12504018/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com