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);