【问题标题】:Ajax: responseXML returning nullAjax:responseXML 返回 null
【发布时间】:2013-06-15 20:02:19
【问题描述】:

阅读 Ajax 初学者书籍,第二个示例是从 php 文件中获取 XMl 数据。我已经被困了大约 2 个小时,现在谷歌搜索并阅读该网站对其他人类似问题的答案,我无法弄清楚

我的功能

var options;

function getOptions1(){
    var XMLHttpRequestObject = new XMLHttpRequest();
    XMLHttpRequestObject.open("GET", "http://localhost/AV/data.php", false); // this was "true" somewhere i read to set it to "false"
    XMLHttpRequestObject.onreadystatechange = function(){
        if (this.readyState != 4) return;
        if (this.status == 200){ 
            alert ("hi");
            var xmlDocument = this.responseXML;
            options = xmlDocument.getElementsByTagName("option"); // firefox tels me here "TypeError xmlDocument is null"
            listOptions();
        }
    }
    XMLHttpRequestObject.send(null);
}

这是 data.php 文件

 <?xml version="1.0" encoding="UTF-8" ?> //i read to add that encoding in there - no help
    <options>
        <option>red</option>
        <option>green</option>
        <option>blue</option>
    </options>

【问题讨论】:

  • 您是否尝试过使用 Firebug、Chrome Inspector 或任何类似工具来调试您正在创建的请求?
  • responseXML is null 的可能重复项
  • @Shikiryu 这是不是 OP 遇到的同样问题。他的代码已经检查了其他代码存在的问题。
  • 本杰明的回答解决了我的问题,非常感谢

标签: xml ajax


【解决方案1】:

尝试将其添加到 PHP 文件的顶部(在 php 标记中):

header('Content-Type: text/xml');

如果你不告诉 PHP 以text/xml 发送响应,它很可能会以text/html 发送响应,这意味着responseXML 属性将为空。

另外,请确保您没有违反同源政策。您需要您的请求来自同一个域和同一个端口。

尝试改变

 XMLHttpRequestObject.open("GET", "http://localhost/AV/data.php", false); // this was "true" somewhere i read to set it to "false"

收件人:

 XMLHttpRequestObject.open("GET", "/AV/data.php", false); 

【讨论】:

  • php 标签中的标题修复了它。这本书有 7 年的历史(傻瓜用 ajax),这只是第二个例子。到目前为止,这两个例子都给我带来了几个小时的麻烦。我从头到尾阅读的 c++ 书并没有因为这本书给我带来的挫败感。谢谢本杰明!编辑:也 - 是的,所有这些文件都在同一个域中
  • @Solus 我建议你阅读 Eloquent JavaScript,它是在线免费且更新的 :) 祝你发展顺利! (P.S. XML 本身很古老,我不会这种东西。一般来说,对于数据而不是文档,JSON 是当今事实上的标准)
  • @BenjaminGuenbaum(你的名字怎么不像其他人那样自动填充?奇怪..)我刚拿到你推荐的书,很快就会开始阅读。我正在阅读的这本书是 0 比 3 的例子.. 强调因为它不起作用,因为我猜作者在发布之前没有校对他们的代码。感谢您的帮助
【解决方案2】:

data.php 文件重命名为data.xml 以避免PHP 处理器在&lt;??&gt; 标签上出错

【讨论】:

  • 我假设他正在生成 XML with PHP,否则他不会一开始就将其命名为 .php
  • 也许,但是 PHP 在第一行仍然会遇到问题。为什么要用PHP来生成这么简单的文件?
  • 例如从数据库或其他数据源中获取选项。
  • 不鼓励使用 PHP 的短打开标签 () (php.net/manual/en/language.basic-syntax.phptags.php),即使文档中的默认设置是启用它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 2020-06-19
  • 2011-10-15
相关资源
最近更新 更多