首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法使用jQuery正确设置Accept HTTP头

无法使用jQuery正确设置Accept HTTP头
EN

Stack Overflow用户
提问于 2009-07-17 20:41:16
回答 5查看 94K关注 0票数 77

我尝试用下面的jquery代码将Accept HTTP头设置为"text/xml“:

代码语言:javascript
复制
$.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版本。

有人知道如何在IE8中正确设置/清除Accept标头吗?

更新:由于某些原因,当我输入星号时,星号没有出现。IE中的Accept标头显示为:Accept: */*, text/xml

EN

回答 5

Stack Overflow用户

发布于 2011-07-14 19:21:07

我在这方面也遇到了问题,不仅仅是在IE中,在使用jQuery 1.6.2的Chrome和Safari中也是如此。这个解决方案似乎在我尝试过的所有浏览器(Chrome、Safari、IE、Firefox)上都能正常工作。

代码语言:javascript
复制
$.ajax({
    headers: { 
        Accept : "text/plain; charset=utf-8",
        "Content-Type": "text/plain; charset=utf-8"
    },
    data: "data",
    success : function(response) {
        ...
    }
})

如果这仍然给你带来麻烦,那就试试吧。

票数 71
EN

Stack Overflow用户

发布于 2011-07-20 06:14:59

使用jQuery 1.5+,您可以设置每个dataType的accepts标头,这样您就可以执行以下操作:

代码语言:javascript
复制
$.ajax({
    dataType: ($.browser.msie) ? "text" : "xml",
    accepts: {
        xml: "text/xml",
        text: "text/xml"
    }
});
票数 25
EN

Stack Overflow用户

发布于 2009-07-21 02:51:45

您的问题似乎就是这里描述的问题:http://www.grauw.nl/blog/entry/470。问题是XMLHttpRequest specification当前声明用户代理在默认情况下不应该为请求设置任何Accept头,因此req.setRequestHeader()可以只附加新的Accept。不幸的是,浏览器还没有遵守这一点。问题记录可以让你测试你的浏览器,看看它是否工作正常,不幸的是,IE7,Chrome,Safari,Firefox和Opera都失败了。

Laurens Grauw还谈到了首先尝试清空Accept报头的效果

代码语言:javascript
复制
setRequestHeader('Accept', '')

代码语言:javascript
复制
setRequestHeader('Accept', null)

这些可能会对你有所帮助。

丑陋的服务器端技巧:如果你能控制你的服务器端应用,你可以硬连接到总是返回XML,添加对自定义媒体类型的支持,比如"application/i-really-want-xml",或者添加对自定义HTTP头的支持,比如"X-Accept“。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1145588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档