Javascript 加载消息和设置超时
我有以下脚本:Javascript 加载消息和设置超时,javascript,jquery,Javascript,Jquery,我有以下脚本: $(function() { $(".message").hide(); function simulate_ajax_call() { $.ajax({ url: "/echo/json/", success: function(){ alert("done"); $(".message").empty().html("don
$(function() {
$(".message").hide();
function simulate_ajax_call()
{
$.ajax({
url: "/echo/json/",
success: function(){
alert("done");
$(".message").empty().html("done");
$(".message").delay(1000).fadeOut(500);
}
});
}
$('.button').click(function() {
$(".message").fadeIn(500);
setTimeout("simulate_ajax_call()", 5000);
});
});
使用以下HTML:
<input type="button" value="button" class="button" />
<div class="message">loading...</div>
加载。。。
由于某种原因,setTimeout
部件不工作。i、 e.5000毫秒后,它似乎没有调用该函数
.您需要更换:
setTimeout("simulate_ajax_call()", 5000);
与:
您应该避免将
()
放在函数名的末尾,否则:)
执行
setTimeout(“simulate\u ajax\u call()”,5000)
相当于eval()
调用该代码,该代码将自动运行函数。setTimeout
eval
在全局范围内声明其字符串参数,但simulate\u ajax\u call
在嵌套范围内声明,因此,eval
无法找到它来调用它
正如其他两个答案所指出的,解决此问题的最佳方法是使用函数传递版本的setTimeout
,但要小心删除括号,因为您不希望意外地立即调用函数
如果您在全局范围内声明了
simulate\u ajax\u call
,您的代码可能会工作。在这种情况下,括号应该是正确的,尽管字符串版本的setTimeout
通常仍然是个坏主意。先进行基本调试。您100%确定这是因为超时,而不是因为Ajax调用中的问题吗?无论如何,无论您做什么,都应该使用setTimeout(function(){simulate_Ajax_call();},5000)
@Pekka或setTimeout(模拟ajax调用,5000)代码>-无需在另一个函数中包装函数调用。函数是,记得吗P@Jacob很公平!不过,我倾向于使用函数表示法,以防以后需要添加一些东西(如参数)。
setTimeout(simulate_ajax_call, 5000);