-6

我有这个脚本和以下站点。看起来很奇怪,脚本甚至没有触发第一个警报。如果我用警报替换“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");
}
4

6 回答 6

5

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

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

需要是两个脚本标签。

<script src="signals.js" type="text/javascript"></script>
<script>
    update_table();
</script>
于 2013-10-21T16:02:13.387 回答
3

你不能给一个<script>元素一个src属性一个脚本作为子文本节点。如果这样做,则只会使用该属性,并且将忽略内联脚本。

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

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

另请参阅脚本元素的 HTML 5 规范

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

于 2013-10-21T16:01:51.783 回答
2

您的 javascript 需要在<script>标签中。

于 2013-10-21T16:00:03.880 回答
1

您需要<script>在您的 javascript 周围添加标签。

此外,您不能update_table()在定义它之前执行。

于 2013-10-21T16:02:05.247 回答
1

您需要将脚本 ( 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

于 2013-10-21T16:03:45.647 回答
0

将 JS 代码放在<script>标签中,因为你已经创建了一个函数,所以需要触发它来执行操作......类似<body onload=update_table()>

于 2013-10-21T16:05:25.167 回答