我想设置接受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
。
我也遇到了麻烦,这一点,不仅在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) {
...
}
})
尝试,如果这仍然是给你的麻烦。
使用jQuery 1.5或更高版本,您可以设置接受的每头dataType
所以你可以做这样的事情:
$.ajax({
dataType: ($.browser.msie) ? "text" : "xml",
accepts: {
xml: "text/xml",
text: "text/xml"
}
});
你的问题似乎在这里所描述的: 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-接受”。
我认为原来的海报可能是指该链接: http://blogs.msdn.com/ieinternals/archive/2009/07/01/IE-and-the-Accept-Header.aspx然而,这并不解释一下你看到的行为。
IE不,本身具有您所描述的行为,并通过XMLHttpRequest设置Accept头应能正常工作。 我在IE8测试,以确认。
这是可能有一个问题,在您的jQuery的版本,或者你有一些插件重整你的流量?
虽然这个心不是文件如何规定它需要做的事情,这是我工作。
jQuery.ajax({
type: "POST",
url: "...",
data: ...,
contentType: "text/xml",
beforeSend: function(req) {
req.setRequestHeader("Accept", "text/xml");
}, ...});
我不相信,IE浏览器(所有版本)中与Accept头不错。 请参阅此链接:[ http://blogs.msdn.com/ieinternals/archive/2009/07/01/IE-and-the-Accept-Header.aspx]
一种可能的解决办法可能是检查用户代理,看看它的IE浏览器。 如果是的话,检查文本/ XML的存在。
祝好运!
编辑:
链接哎呀! 我的直觉是IE总是添加/和设置accept头只是增加/后所需的MIME类型。