不能正确设置与jQuery的接受HTTP标头(Cannot properly set the Acc

2019-06-17 10:27发布

我想设置接受HTTP标头为“text / xml”的这个jQuery代码:

$.ajax({
    beforeSend: function(req) {
        req.setRequestHeader("Accept", "text/xml");
    },
    type: "GET",
    url: "[proper url]",
    contentType: "text/plain; charset=utf-8",
    dataType: ($.browser.msie) ? "text" : "xml",
    username: '---',
    password: '-------',                                
    success: function(data) {
        var xml;
        if (typeof data == "string") {
            alert("Data is string:" + data);
            xml = new ActiveXObject("Microsoft.XMLDOM");
            xml.async = false;
            xml.loadXML(data);
        } else {
            xml = data;
            alert("Data is not string:" + $(xml).text());
        }
        // Returned data available in object "xml"
        //alert("Status is: " + xml.statusText);
        $("#ingest_history").html($(xml).text());
    }              
});

在Firefox它的伟大工程。

但在IE中,我试图为Accept头设置的值似乎得到追加到结尾,使其成为: Accept: */*, text/xml 。 这使我的AJAX调用返回的HTML版本,而不是我想要的XML版本。

是否有人知道如何正确设置/清除接受头在IE 8?

更新:由于某种原因星号并没有出现,因为我进入了他们。 在IE中的Accept报头似乎是: Accept: */*, text/xml

Answer 1:

我也遇到了麻烦,这一点,不仅在IE浏览器,而且在Chrome和Safari浏览器使用jQuery 1.6.2。 该解决方案显示为打算我试过器(Chrome,Safari浏览器,IE,火狐)浏览器的所有工作。

$.ajax({
    headers: { 
        Accept : "text/plain; charset=utf-8",
        "Content-Type": "text/plain; charset=utf-8"
    },
    data: "data",
    success : function(response) {
        ...
    }
})

尝试,如果这仍然是给你的麻烦。



Answer 2:

使用jQuery 1.5或更高版本,您可以设置接受的每头dataType所以你可以做这样的事情:

$.ajax({
    dataType: ($.browser.msie) ? "text" : "xml",
    accepts: {
        xml: "text/xml",
        text: "text/xml"
    }
});


Answer 3:

你的问题似乎在这里所描述的: http://www.grauw.nl/blog/entry/470 。 问题是, XMLHttpRequest的规范目前规定,用户代理不应设置任何默认接受标头的请求,这样req.setRequestHeader()可以只追加新的接受。 不幸的是浏览器还没有坚持这一点。 问题的书面记录,可以测试你的浏览器,看看它是否工作正常,不幸的是IE7,Chrome浏览器,Safari浏览器,Firefox和Opera都失败。

劳伦斯Grauw还谈到第一次尝试空出来的Accept头与效果

setRequestHeader('Accept', '')

要么

setRequestHeader('Accept', null)

这可能有助于在这里。

丑陋的服务器端的黑客:如果你有超过你的服务器端应用程序的控制,你可以硬线它总是返回XML,加上像“应用程序/ I-真的想学XML”定制的媒体类型支持,或添加了支持自定义HTTP标头,如“X-接受”。



Answer 4:

我认为原来的海报可能是指该链接: http://blogs.msdn.com/ieinternals/archive/2009/07/01/IE-and-the-Accept-Header.aspx然而,这并不解释一下你看到的行为。

IE不,本身具有您所描述的行为,并通过XMLHttpRequest设置Accept头应能正常工作。 我在IE8测试,以确认。

这是可能有一个问题,在您的jQuery的版本,或者你有一些插件重整你的流量?



Answer 5:

虽然这个心不是文件如何规定它需要做的事情,这是我工作。

 jQuery.ajax({
    type: "POST",
    url: "...",
    data: ...,
    contentType: "text/xml",
    beforeSend: function(req) {
    req.setRequestHeader("Accept", "text/xml");
    },  ...});


Answer 6:

我不相信,IE浏览器(所有版本)中与Accept头不错。 请参阅此链接:[ http://blogs.msdn.com/ieinternals/archive/2009/07/01/IE-and-the-Accept-Header.aspx]

一种可能的解决办法可能是检查用户代理,看看它的IE浏览器。 如果是的话,检查文本/ XML的存在。

祝好运!

编辑:

链接哎呀! 我的直觉是IE总是添加/和设置accept头只是增加/后所需的MIME类型。



文章来源: Cannot properly set the Accept HTTP header with jQuery