我有这个脚本和以下网站。看起来很奇怪,剧本甚至没有发出第一个警报。如果我用警报替换“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");
}
答案 0 :(得分:5)
您不能在具有外部源的函数内部拥有脚本
<script src="signals.js" type="text/javascript">
update_table();
</script>
需要是两个脚本标签。
<script src="signals.js" type="text/javascript"></script>
<script>
update_table();
</script>
答案 1 :(得分:3)
您不能将<script>
元素作为子文本节点的src
元素和作为子文本节点。如果这样做,则只会使用该属性,并且将忽略内联脚本。
<script src="signals.js"></script>
<script>update_table();</script>
(假设代码块末尾的JS表示signals.js
的内容,而不是HTML文档正文。)
另请参阅HTML 5 specification for the script element:
内容模型
如果没有src属性,则取决于type属性的值,但必须匹配脚本内容限制 如果存在src属性,则该元素必须为空或仅包含与脚本内容限制匹配的脚本文档。
答案 2 :(得分:2)
您的javascript需要位于<script>
代码中。
答案 3 :(得分:2)
您需要在包含signals.js的脚本之后移动脚本(updateTable()
)的内容:
<script src="signals.js" type="text/javascript"></script>
<script>update_table();</script>
来自w3的相关位:
如果src具有URI值,则用户代理必须忽略该元素 内容并通过URI检索脚本。
答案 4 :(得分:1)
您的javascript周围需要<script>
个标签。
此外,在定义之前无法执行update_table()
。
答案 5 :(得分:0)
将JS代码放在<script>
标记中,因为您已经创建了一个函数,所以需要触发它来执行操作...类似于<body onload=update_table()>