运行代码之前的JQuery SetTimeout

时间:2012-11-14 21:49:22

标签: php jquery

我正在尝试在JQuery中运行一个基本上关闭或启动服务器的函数。我到目前为止的代码就是这个 -

$(".stopServer").click(function(){
    $.post("controller.php",{stop: 'true', server: this.name});
    $('#test'+this.name).load('controller.php?status=true&server='+this.name);
});

问题显然是它会使服务器停止运行,但它会立即更新状态div('#test'+ this.name)。这不好,因为服务器需要一段时间才能关闭。我一直试图让SetTimeout工作,但无法弄明白......任何帮助都会受到赞赏。

谢谢你们,你们是最好的:)

更新:

完整的功能在这里:

$(document).ready(function() {

$(".startServer").click(function(){
    $.post("controller.php",{server: this.name});
    setTimeout("showStatus('"+this.name+"')", 3000);
});

$(".stopServer").click(function(){
    $.post("controller.php",{stop: 'true', server: this.name});
    setTimeout("showStatus('"+this.name+"')", 3000);
});

function showStatus(name) {
    alert(name);
    $('#test'+name).load('controller.php?status=true&server='+name);
}
});

更新

考虑到它的想法,而是每秒轮询一次状态。

var refreshId = setInterval(function()
{
    $('.status').each(function() {
    var $name = $(this).attr('name');
    $(this).load("controller.php?status=true&server=" + $name);

});
}, 1000);

3 个答案:

答案 0 :(得分:2)

我不知道当服务器实际关闭时你是否会收到来自'controller.php'的回复,如果你没有,请试试这个......

$(".stopServer").click(function(){
    $.post("controller.php",{stop: 'true', server: this.name});
    setTimeout("showStatus('"+this.name+"')", 10000);
});

function showStatus(name) {
    $command = $('#test'+name).load('controller.php?status=true&server='+name);
}

答案 1 :(得分:1)

ajax调用是异步的。 $ .post()调用立即返回,让实际的后期工作在后台完成。要么将其更改为同步调用(通常不是一个好主意),要么将后续代码放在.post调用的“成功”部分,例如

$.post('controller.php', success: function(data) {
    $command = etc....
});

答案 2 :(得分:1)

我添加了一个快速的示例,将函数包装在setTimeout

​$(document).ready(function(){
    $('#test').click(function(){
        var message = 'hello';
        setTimeout(function(){ callback(message) },1000); 
    });
    function callback(name){
        alert(name);
    }        
});​

JSFiddle DEMO