73 ajax jquery internet-explorer header http
我正在尝试使用此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());
}
});
Run Code Online (Sandbox Code Playgroud)
在Firefox中它很棒.
但是在IE中,我试图为Accept标头设置的值似乎被附加到结尾,所以它变成:Accept: */*, text/xml.这导致我的ajax调用返回html版本而不是我想要的xml版本.
有谁知道如何在IE 8中正确设置/清除Accept标头?
更新:出于某种原因,当我输入时,星号没有出现.IE中的Accept Header似乎是:Accept: */*, text/xml.
Joe*_*erg 70
我也遇到了麻烦,不只是在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) {
...
}
})
Run Code Online (Sandbox Code Playgroud)
如果这仍然给你带来麻烦,试试看.
gna*_*arf 24
使用jQuery 1.5+,您可以设置每个接受标头,dataType这样您就可以执行以下操作:
$.ajax({
dataType: ($.browser.msie) ? "text" : "xml",
accepts: {
xml: "text/xml",
text: "text/xml"
}
});
Run Code Online (Sandbox Code Playgroud)
您的问题似乎是这里描述的问题:http://www.grauw.nl/blog/entry/470.问题是XMLHttpRequest规范当前声明用户代理不应该为请求默认设置任何Accept头,因此req.setRequestHeader()可以只添加新的Accepts.不幸的是,浏览器还没有坚持这一点.问题编写可让您测试浏览器以查看它是否正常工作,不幸的是IE7,Chrome,Safari,Firefox和Opera都失败了.
Laurens Grauw还谈到了首先尝试将Accept标头置空的效果
setRequestHeader('Accept', '')
Run Code Online (Sandbox Code Playgroud)
要么
setRequestHeader('Accept', null)
Run Code Online (Sandbox Code Playgroud)
这些可能会有所帮助.
丑陋的服务器端黑客攻击:如果您可以控制服务器端应用程序,则可以将其硬连接以始终返回XML,添加对"application/i-really-want-xml"等自定义媒体类型的支持,或者添加对自定义HTTP标头,如"X-Accept".
我不相信 IE(任何版本)都能很好地处理 Accept 标头。请参阅此链接:[ http://blogs.msdn.com/ieinternals/archive/2009/07/01/IE-and-the-Accept-Header.aspx]
一个可能的解决方案可能是检查用户代理以查看它是否是 IE。如果是,则检查 text/xml 是否存在。
祝你好运!
编辑:
链接上的 Opps。我的预感是 IE 总是添加/并设置接受标头只是在/之后添加所需的 mime 类型。
| 归档时间: |
|
| 查看次数: |
90603 次 |
| 最近记录: |