我需要使用javascript从指定的URL加载xml文件。这就是我在做的事情:
function GetXMLDoc() {
var url = 'http://www.warm.fm/exports/NowOnAir.xml';
var httpRequest = null;
try {
httpRequest = new ActiveXObject('Msxml2.XMLHTTP');
}
catch (e) {
try {
httpRequest = new ActiveXObject('Microsoft.XMLHTTP');
}
catch (e2) {
try {
httpRequest = new XMLHttpRequest();
}
catch (e3) { httpRequest = false; }
}
}
if (httpRequest) {
httpRequest.open('POST', url, false);
httpRequest.setRequestHeader("Content-Type", "text/xml");
httpRequest.send(null);
alert(httpRequest.responseText);
}
else {
alert(httpRequest);
}
它在IE中完美运行但在FF和谷歌浏览器中却没有。 Firebug向我显示以下错误:
未捕获的异常:[Exception ...“组件返回失败代码:0x80004005(NS_ERROR_FAILURE)[nsIXMLHttpRequest.send]”nsresult:“0x80004005(NS_ERROR_FAILURE)”location:“JS frame :: http://localhost:49697/XMLParser.js :: GetXMLDoc ::第43行“数据:否]
有没有人有答案可以帮助我解决问题?
谢谢, Mohin酒店
答案 0 :(得分:2)
httpRequest.open('POST', url, false);
httpRequest.setRequestHeader("Content-Type", "text/xml");
httpRequest.send(null);
这没有多大意义。您正在进行POST并声称您正在发送XML文件作为请求正文,但随后不发送任何内容。
我建议你真的想做一个简单的GET:
httpRequest.open('GET', url, false);
httpRequest.send();
当然,你必须从www.warm.fm
上的文件中做到这一点,以满足相同的原始政策; localhost
无效。
我会认真重新考虑请求的同步性(open...false
)。这会在获取文件时冻结浏览器,这对用户来说非常恶劣。具有onreadystatechange
回调的异步请求几乎总是可取的。
此外,跨浏览器的xmlhttprequest内容有点过时,首先尝试ActiveXObject
。原住民XMLHttpRequest
通常是首先要去的人。请尝试使用此IE6后备代码:
if (!window.XMLHttpRequest && 'ActiveXObject' in window) {
window.XMLHttpRequest= function() {
return new ActiveXObject('MSXML2.XMLHttp');
}
}
然后您可以在任何浏览器上执行new XMLHttpRequest()
。