我尝试用下面的jquery代码将Accept HTTP头设置为"text/xml“:
$.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
。
发布于 2011-07-14 19:21:07
我在这方面也遇到了问题,不仅仅是在IE中,在使用jQuery 1.6.2的Chrome和Safari中也是如此。这个解决方案似乎在我尝试过的所有浏览器(Chrome、Safari、IE、Firefox)上都能正常工作。
$.ajax({
headers: {
Accept : "text/plain; charset=utf-8",
"Content-Type": "text/plain; charset=utf-8"
},
data: "data",
success : function(response) {
...
}
})
如果这仍然给你带来麻烦,那就试试吧。
发布于 2011-07-20 06:14:59
使用jQuery 1.5+,您可以设置每个dataType
的accepts标头,这样您就可以执行以下操作:
$.ajax({
dataType: ($.browser.msie) ? "text" : "xml",
accepts: {
xml: "text/xml",
text: "text/xml"
}
});
发布于 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报头的效果
setRequestHeader('Accept', '')
或
setRequestHeader('Accept', null)
这些可能会对你有所帮助。
丑陋的服务器端技巧:如果你能控制你的服务器端应用,你可以硬连接到总是返回XML,添加对自定义媒体类型的支持,比如"application/i-really-want-xml",或者添加对自定义HTTP头的支持,比如"X-Accept“。
https://stackoverflow.com/questions/1145588
复制相似问题