【问题标题】:I can't get responseXML using AJAX (XMLHttpRequest)我无法使用 AJAX (XMLHttpRequest) 获取 responseXML
【发布时间】:2013-08-08 00:21:21
【问题描述】:

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

奇怪的是,我使用不同的浏览器(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

你能帮忙吗? 谢谢

【问题讨论】:

  • 所有文件都在同一个服务器吗?
  • 您可能还想检查xht.status200

标签: php javascript xml ajax cordova


【解决方案1】:

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

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

【讨论】:

  • 如果是这种情况,那么为什么 IE8 会给我响应?是因为我选择允许可能是上述政策一部分的被阻止内容吗?如果这是真的,为什么其他浏览器不给我这个选项?
【解决方案2】:

您的 XML 无效。您在 XML 文档的第一行中缺少这一行:

<?xml version="1.0" ?> 

【讨论】:

    【解决方案3】:

    CORS 可能是这里的问题。要验证尝试在启用了“--disable-web-security”的谷歌浏览器中测试相同的内容。这将禁用网络安全并启用 CORS。不用说,正常上网时不要使用此模式。

    PS: 您将需要关闭所有 chrome 窗口/选项卡并启动一个禁用安全功能的新窗口/选项卡才能正常工作。

    【讨论】:

      【解决方案4】:

      添加到这个...

      你的开盘应该是

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 2017-06-17
        • 1970-01-01
        • 2023-03-16
        • 1970-01-01
        • 2012-07-18
        • 2010-11-04
        相关资源
        最近更新 更多