2010-09-23 42 views
1

我需要使用JavaScript从指定的URL加载xml文件。这是我在做什么:在FF&Google Chrome中使用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和谷歌浏览器。萤火虫显示我以下错误:

未捕获的异常:[异常... “组件返回失败代码:0x80004005的(NS_ERROR_FAILURE)[nsIXMLHttpRequest.send]” nsresult: “0x80004005的(NS_ERROR_FAILURE)” 位置:“JS帧: :http://localhost:49697/XMLParser.js :: GetXMLDoc :: line 43“data:no]

有没有人有答案可以帮助我解决问题?

感谢, Mohin酒店

+0

你为什么不能使用像jQuery Ajax这样的JavaScript库的任何原因?它实现了跨浏览器调用 - 例如,请参阅['get()'](http://api.jquery.com/jQuery.get/)函数。 – Oded 2010-09-23 12:56:22

+0

是的。我只想使用JavaScript和HTML,没有别的。 – Mohaimen 2010-09-23 13:01:09

回答

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()

+0

嗨,感谢您的宝贵回复。其实我在这里使用的是假,因为我不希望它是异步的。我使用了httpRequest.open('GET',url,false); httpRequest.send();但仍然是同样的问题。我需要让我的代码在FF上工作,因为它正在处理IE – Mohaimen 2010-09-23 13:29:54

+1

你从哪里运行脚本?如上所述,由于同源策略,它绝对不会从本地主机到www.warm.fm。出于某种原因,当您尝试执行阻塞的同步请求时,您将获得NS_ERROR_FAILURE,而对于异步请求,则会出现“status = 0”故障。无论哪种方式,它不会工作。 – bobince 2010-09-23 14:14:38

+0

我明白你在说什么。但你知道它的工作原理是从IE的本地主机上运行。你知道它为什么在本地主机上使用IE吗? – Mohaimen 2010-09-23 14:23:15

相关问题