2014-01-15 37 views
0

我想从URL中检索XML并将其存储在变量xmlDoc中。带有URL的XML http请求

我有以下几点:

if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari 
       xmlhttp=new XMLHttpRequest(); 
      } else {// code for IE6, IE5 
       xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
      } 

      xmlhttp.open("GET","localhost:8080/rest/xml",false); 
      xmlhttp.send(); 
      xmlDoc=xmlhttp.responseXML; 

但我没有得到的XML文件,是不是我需要补充的吗?

+1

你或许应该看一些例子,Ajax请求的异步,所以你要听的onreadystate事件来捕获响应 – adeneo

+0

[这是一个例子。](http://www.quirksmode.org/js/xmlhttp.html) – Andy

回答

2

open该方法被传递false作为最后一个参数,使之成为一个同步请求。 OP的原始代码是正确的,除了一件事:URL。

xmlhttp.open("GET","http://localhost:8080/rest/xml",false); 

或者,如果你想使URL不可知的当前页的协议:

xmlhttp.open("GET","//localhost:8080/rest/xml",false); 
+0

嗨格雷格,我在当地测试它。现在我正在使用之前上传的用户的URL进行测试。 (cdn.florianbussmann.de/stackoverflow/21140602_catalog.xml)。我在它的前面添加了“//”。它仍然没有工作。它工作正常,在当地,在我保存XML文件到我的文件夹,只是你可能会撞你对同一个域策略头名“21140602_catalog.xml” – PhoonOne

+0

的说法。您只能向当前网页所在域中的网址发出AJAX请求。这可能是它在本地运行的原因,而不是其他网址。 –

+0

好吧,我明白了,如果我的代码被上传到同一个域中的.XML文件,那么这将是能够访问它? – PhoonOne

0

发送之前,请附上像这样的回调。

xmlhttp.onreadystatechange=function() 
     { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
     xmlDoc=xmlhttp.responseText; 
     }else if (xmlhttp.readyState==4 && xmlhttp.status != 200) 
     { 
     alert("error-" + xmlhttp.responseText); 
     } 
     } 
+0

发送前尝试过,没有工作仍然 – PhoonOne

+0

为什么你要使用同步?为什么不是异步? –

+0

我可以使用异步,这是我发布的同步代码? – PhoonOne