【问题标题】:JavaScript script doesn't execute [closed]JavaScript脚本不执行[关闭]
【发布时间】:2013-10-21 15:59:05
【问题描述】:

我有这个脚本和以下站点。看起来很奇怪,脚本甚至没有触发第一个警报。如果我用警报替换“update_table”函数,它会显示警报。

    <head>
    <script src="signals.js" type="text/javascript">
        update_table();</script>
</head>
<body>

现在这是来自 signals.js:

    function update_table()
{
    alert("h");
    var old_table = document.getElementById('signals').innerHTML;
    alert("h");
    var req = new XMLHttpRequest();
    alert("h");
    req.onreadystatechange = function(){
    if(req.status == 200)
    {
        if(req.readyState == 4)
        {
            var new_table = req.responseText;
            if(old_table != new_table)
            {
                //play sound
                alert("Sound!");
            }
            alert("Refresh!");
            setTimeout(update_table(), 5000);
        }
        }
    }
    var link = "table.php?refresh=true";
    alert("h");
    req.open("GET", link, true);
    req.send();
    alert("h");
}

【问题讨论】:

  • 你是不是故意没有提到函数'update_table'周围的脚本标签?
  • 函数取自signals.js——不需要脚本标签!
  • 内联脚本中不能有src 属性。脚本只能是内联的或外部的,不能同时是两者。使用两个单独的脚本元素。

标签: javascript php html


【解决方案1】:

您不能在具有外部源的函数中包含脚本

<script src="signals.js" type="text/javascript">
    update_table();
</script>

需要是两个脚本标签。

<script src="signals.js" type="text/javascript"></script>
<script>
    update_table();
</script>

【讨论】:

    【解决方案2】:

    您不能给&lt;script&gt; 元素一个src 属性一个脚本作为子文本节点。如果您这样做,则只会使用该属性,而内联脚本将被忽略。

    <script src="signals.js"></script>
    <script>update_table();</script>
    

    (假设你的代码块末尾的JS代表signals.js的内容,而不是HTML文档正文)。

    另见HTML 5 specification for the script element

    内容模型
    如果没有 src 属性,则取决于 type 属性的值,但必须符合脚本内容限制。
    如果有 src 属性,则该元素必须为空或仅包含也符合脚本内容限制的脚本文档。

    【讨论】:

      【解决方案3】:

      您的 javascript 需要在 &lt;script&gt; 标记中。

      【讨论】:

        【解决方案4】:

        您的 javascript 周围需要 &lt;script&gt; 标签。

        另外,你不能在定义之前执行update_table()

        【讨论】:

          【解决方案5】:

          需要将脚本的内容(updateTable())移到包含signals.js的脚本之后:

          <script src="signals.js" type="text/javascript"></script>
          <script>update_table();</script>
          

          来自 w3 的相关位:

          如果 src 有一个 URI 值,用户代理必须忽略该元素的 内容并通过 URI 检索脚本。

          http://www.w3.org/TR/html401/interact/scripts.html#h-18.2.1

          【讨论】:

            【解决方案6】:

            将JS代码放在&lt;script&gt;标签中,既然你已经创建了一个函数,它需要被触发才能执行动作……类似于&lt;body onload=update_table()&gt;

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-09-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多