jQuery.ajax与POST或PUT具有用于IE8和IE9没有响应标头(jQuery.ajax

2019-10-17 06:18发布

我注意到,与IE8和IE9,如果我叫使用jQuery.ajax()的POST我的RESTful API和PUT动词,那么我不jqXHR取回任何响应头 。 然而,GET请求按预期方式工作。

此行为是从所有其他浏览器不同。 我验证过的Chrome,FF,Opera和Safari都返回全套预计头在POST和PUT请求的响应。 只有IE8和IE9似乎在地板上扔了头。 (我没有检查一件事是HEAD请求会发生什么。)

我已经使用Fiddler验证了头实际上使得它在线材,所以这个问题是要么与jQuery本身或与IE8和IE9。

这是一个已知的问题? 如果是这样,有一种解决方法。 我可以重载jQuery的/覆盖东西保存下面的帖子标题和PUT? 我目前的解决办法是重新提取简单地用成功回调内得到修改的数据,因为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) {
            //...
        }
    });

Answer 1:

原来,这是一个已知的问题 IE的所有当前香精(7,8,和9)。 如果响应代码是204,然后简单地IE抛出在地板上的所有标题。 对于像我这样的人编写需要并发检查向上最新ETAG纯AJAX实现,IE杀害纯AJAX方法,并迫使我做一个直接的GET获取当前ETAG。 :捂脸:

这里有几个我设法挖掘的文章:

ETag头在HTTP缺少在Internet Explorer中无内容回应

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

response.headers.ETag未定义

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

一个部分解决方法是嗅探IE,然后做一个直接的HEAD请求获取ETag的,但是这种方法的问题是,如果有人已经成功地在您的前方忙里偷闲和更新记录,你会得到的eTag 她的变化,不是你的 。 所以,这不是一个可以接受的解决办法。

所以,我嗅探IE,做一个直接的GET。 否则,对于所有其他浏览器,我只是使用jQuery的jqXHR.getResponseHeader(namespace.constants.headers.eTag)得到的eTag。



Answer 2:

如果您的REST服务是不同的服务器,你是从请求的应用程序,你可能想看看这篇文章。 接受的答案解释了为什么你需要使用JSONP内容类型。

jQuery的AJAX调用REST服务



文章来源: jQuery.ajax with POST or PUT has no response headers for IE8 and IE9