【问题标题】:Javascript XML AccessJavascript XML 访问
【发布时间】:2017-01-12 10:11:55
【问题描述】:

我正在尝试访问我的第一个 XML 文件,但不知道这是怎么回事。我是否需要运行服务器才能使其工作?我在 Chrome 上运行它。

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Starter File</title>
    <meta name="description" content="An interactive getting started guide for Brackets.">

    <script type="text/javascript">
        var xhttp = new XMLHttpRequest();
        xhttp.open("GET", "motd.xml", "false");
        xhttp.send();

        document.getElementById("demo").innerHTML = xhttp.getElementsByTagName("daily")[0].firstChild.nodeValue;

    </script>

</head>
<body>
    <p id="demo"></p>
</body>

这里是 XML 文件:

<?xml version="1.0"?>

<messages>
  <daily>Today is Sunday.</daily>
  <daily>Today is Monday.</daily>
  <daily>Today is Tuesday.</daily>
  <daily>Today is Wednesday.</daily>
  <daily>Today is Thursday.</daily>
  <daily>Today is Friday.</daily>
  <daily>Today is Saturday.</daily>
</messages>

【问题讨论】:

    标签: xml file get xmlhttprequest send


    【解决方案1】:

    您正在发出异步请求

    xhttp.open("GET", "motd.xml", "false");
    

    open 的第三个参数是一个布尔值。如果是true(默认值),则发出异步请求。如果是false已弃用),则您发出同步请求。

    字符串 "false" 等价于布尔值true

    您正试图在响应到达之前读取它。

    如果您将其更改为false,那么您将尝试将结果分配给该段落存在之前该段落的innerHTML

    修复

    • 使用事件侦听器等待 XML 加载,然后再尝试使用它
    • 移动 JavaScript,使其在您尝试修改的段落存在之后运行

    您正试图将 XHR 对象视为 HTML 文档

    XMLHttpRequest 是一个用于发出 HTTP 请求的 API。它不是 XML 文档。你不能打电话给getElementsByTagName。您必须阅读 XML 格式的响应 (xhr.responseXML) 并在其上调用方法。

    这样的:

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>Starter File</title>
      </head>
      <body>
        <p id="demo"></p>
        <script>
            var xhttp = new XMLHttpRequest();
            xhttp.open("GET", "motd.xml");
            xhttp.send();
            xhttp.addEventListener("load", function () {
                document.getElementById("demo").innerHTML = this.responseXML.getElementsByTagName("daily")[0].firstChild.nodeValue;
            });
        </script>
      </body>
    </html>
    

    另一个问题

    我是否需要运行服务器才能使其工作?我在 Chrome 上运行它。

    是的。出于安全原因,Chrome 不允许 XMLHttpRequest 访问本地文件。 (此安全策略因浏览器而异,例如,Firefox 将允许访问与 HTML 文档位于同一目录中的文件)。

    【讨论】:

    • 感谢您的深入回复。我已经对我的代码进行了更改,并且有一次只需将您的修改复制并粘贴到我的文档中。但是它仍然不起作用......即使在新更新的 Firefox 上也是如此。有什么建议?与此同时,我将尝试获取本地服务器程序。
    • 我已将我的代码替换为您的代码,并将其托管在本地 xampp 服务器上......但它仍然不适合我。
    • @NathanWonz — 你有第三个问题,我第一次没有注意到。已编辑。
    • 谢谢,现在可以正常使用了。我从 2011 年写的一本书开始学习这个 XML Javascript。它告诉了我完全不同的东西,所以我一直在磕磕绊绊……显然 5 年内会发生很多变化。现在切换到 2015 版,呵呵。
    猜你喜欢
    • 1970-01-01
    • 2019-06-29
    • 2016-03-03
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多