我无法使用AJAX(XMLHttpRequest)获得responseXML

时间:2013-08-06 20:14:02

标签: php javascript xml ajax cordova

我正在使用javascript(客户端)发送XMLHttpRequest,试图从具有XML内容(服务器端)的php页面获取responseXML。当html页面和php页面处于同一级别(都在本地主机中)时,我没有麻烦。问题在它们不存在时开始 - responseXML始终为null。

奇怪的是,我使用不同的浏览器(chrome,firefox,opera)得到这个结果,除了IE8,它给了我正确的responseText(不是responseXML),但只是在我“允许阻止内容”之后。

另一件事。我正在使用phonegap将这个html页面(请求页面)转换为Android应用程序(这是我的主要目标),当我在平板电脑上测试应用程序时,我得到相同的结果(空响应)。这是客户端代码:

<html>
  <head>
    <title> T_d test </title>
    <script language="javascript">
      var infoPage="http://172.25.10.215/list2.php";
      // 172.25.10.215 the IP address of the server

      function test()
      {
        var xht = new XMLHttpRequest();
        xht.open("GET",infoPage,true);
        xht.send();
        xht.onreadystatechange=function() {
          if (xht.readyState==4) {
            alert(""+xht.responseXML);
            document.getElementById("id1").innerHTML="The result is : "+xht.responseText;
          }
        }
      }
    </script>
  </head>
  <body>
    <form id="form1" name="form1" method="post" action="">
      btn
      <input name="btn" type="button" id="btn" onClick="test();" value="Submit" />
    </form>
    <label id="id1"></label>
  </body>
</html>

这是服务器页面代码:

<?php
  header('Content-Type: text/xml');
?>
<root>
  <file>
    <filename>Test.txt</filename>
    <fileCreatingDate>15-7-2013</fileCreatingDate>
    <fileModifyDate>20-7-2013</fileModifyDate>
    <filesize>10002345</filesize>
    <filetype> Text</filetype>
  </file>
  <file>
    <filename>Test2.txt</filename>
    <fileCreatingDate>19-7-2013</fileCreatingDate>
    <fileModifyDate>20-8-2013</fileModifyDate>
    <filesize>3002345</filesize>
    <filetype> Text</filetype>
  </file>
</root>

以下是我使用IE8获得的响应文本:

  

结果是:Test.txt 15-7-2013 20-7-2013 10002345 Text Test2.txt 19-7-2013 20-8-2013 3002345 Text

你可以帮忙吗? 感谢

4 个答案:

答案 0 :(得分:3)

您不能向JavaScript源自服务器以外的服务器发出AJAX请求。这是因为浏览器'same origin policy,出于安全原因而存在。

您可以使用解决方法,如此问题中所述:Making an AJAX request to another server

答案 1 :(得分:0)

您的XML无效。您缺少此行作为XML文档的第一行:

<?xml version="1.0" ?> 

答案 2 :(得分:0)

CORS可能是这里的问题。要验证是否尝试在Google Chrome浏览器中使用&#34; - disable-web-security&#34;启用。这将禁用Web安全性并启用CORS。不用说,在正常的网上冲浪时不要使用这种模式。

PS: 您将需要关闭所有镀铬窗口/标签,并启动一个禁用安全性的新窗口,以使其正常工作。

答案 3 :(得分:0)

添加到此...

你的公开赛应该是

xht.open("GET","infopage.extension",true); 

您的按钮onclick事件应为onClick="test()"而不是;