【问题标题】:Safari issues, variable undefined (XML/Javascript)Safari 问题,未定义变量(XML/Javascript)
【发布时间】:2014-06-30 11:36:20
【问题描述】:

我有这段代码,它适用于所有浏览器,除了 Safari:

        // Create a connection to the file.
        var Connect = new XMLHttpRequest();

        // Define which file to open and
        // send the request.
        Connect.open("GET", "<?php echo $fileName;?>", false);
        Connect.setRequestHeader("Content-Type", "text/xml");
        Connect.setRequestHeader("Cache-Control", "no-cache");
        Connect.send();

        // Place the response in an XML document.
        var TheDocument = Connect.responseXML;

        // Place the root node in an element.
        var questions = TheDocument.childNodes[0];

        // Retrieve each customer in turn.
        for (var i = 0; i < 1; i++) {
            console.log(i);
            console.log("fake var");
            var question = questions.children[0];
            console.log(question);
        }

变量 $filename 是我正在阅读的 XML 文件的 php 链接。 我有以下问题,代码运行到 For 循环中,我可以记录 var“i”和“fake var”。但是一旦我将 var question 定义为 questions.children[0],代码就会停止。我无法在 safari 中记录问题变量。

有什么想法吗? (也欢迎反馈,还在学习javascript/xml)

我的 XML 示例:

<?xml version='1.0' encoding="UTF-8" ?>
<Beantwoordt_kritiek id="1" admin="Jan Hut" categorie="Omgaan met elkaar" winswf="images/Kado (1).jpg">
  <gebruikers_vraag1>
    <vraag><![CDATA[Sleep de puzzelstukken naar het juiste vakje.]]></vraag>
    <s_vraag><![CDATA[sounds/puzzel.mp3]]></s_vraag>
    <thumb1><![CDATA[images/527puzzel1_1.jpg]]></thumb1>
    <thumb2><![CDATA[images/527puzzel1_2.jpg]]></thumb2>
    <thumb3><![CDATA[images/527puzzel1_3.jpg]]></thumb3>
    <thumb4><![CDATA[images/527puzzel1_4.jpg]]></thumb4>
    <vraagFoto><![CDATA[images/527puzzel1.jpg]]></vraagFoto>
  </gebruikers_vraag1>
</Beantwoordt_kritiek>

【问题讨论】:

  • 您是没有给我们 XHR 链接,还是您真的输入了"&lt;?php echo $fileName;?&gt;"?后者不会执行 PHP(除非您以某种方式制作服务器……也许您可以在 PHP 中执行此操作,我是 Python 人)。另外,您能告诉我们您的 JavaScript 控制台中出现的任何错误吗? webmasters.stackexchange.com/questions/8525/…
  • 我使用 FireBug,但我在 Safari 中没有收到任何错误(在其他浏览器中也没有),由于某种原因它只是中断了。而且,我正在使用的文件是一个 .php 文件,因为我需要其他数据的变量。您可以通过停止 php 在 php 中使用 html,键入您的 html,并在需要时使用 &lt;?php echo 'your php stuf'; /&gt; 再次打开 php。
  • 然后,xml 文件位于根目录中。所以如果你想测试,你可以替换 php echo $fileName for thisIsMyFile.xml

标签: javascript php html xml safari


【解决方案1】:

您可以使用此脚本,因此 safari 会返回相同的结果。

<script>
function getChildren(element) {
  if (element.children == undefined) {
    var childNodes = element.childNodes
    var children = []
    for(var i = 1; i < childNodes.length; i += 2) {  // take every second element
      children.push(childNodes[i]);
    }
    return children;
  } else {
    return element.children
  }
}
</script>

然后在你的脚本中调用它

var question = getChildren(questions)[0];

【讨论】:

  • 你是我的上帝。谢谢!但是,为什么这个脚本可以工作,为什么我的脚本什么也没做?
  • 哈哈只是随机的人来回答你的问题 :) Chrome 比 Firefox 有更好的支持。我为你做了一个 polyfill 来解决这个问题。 Firefox 知道子节点,但是你会得到比你想要的更多的项目,所以我们将它们过滤掉并返回它们。当用户使用 chrome 时,它​​只需要正常的路线......检查一下:developer.mozilla.org/en-US/docs/Web/API/ParentNode.children
猜你喜欢
  • 2011-12-22
  • 2017-09-22
  • 2019-09-21
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
  • 1970-01-01
相关资源
最近更新 更多