2012-11-14 54 views
0

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

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

显然,问题就停止服务器不错,但它更新状态DIV(“#测试” + this.name)直线距离。这是不好的,因为服务器需要一段时间才能关闭。我一直试图让SetTimeout工作,但无法弄清楚...任何帮助将不胜感激。

感谢球员,你是最好的:)

UPDATE:

完整的功能如下:

$(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); 
} 
}); 

UPDATE

放弃它的想法,而不是相反,状态每秒调查一次。

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

}); 
}, 1000); 

回答

1

我已经添加在setTimeout

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

JSFiddle DEMO

+0

我放弃了,我只是每秒调查一次状态。 – Steve

+0

@Steve - cool;如果你决定改变主意,那么这里是演示!祝你好运! – f0x

+0

不管我想要什么,所以我会给你选择的答案:)感谢哥们:) – Steve

1

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

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

包装功能的快速样品不要以为服务器W应该在帖子完成时关闭;猜这就是为什么他要求setTimeout或区间解决方案。 – f0x

+0

是的,服务器需要3秒钟关闭,告诉它做的那个命令后返回像毫秒...... – Steve

+0

至少JS的东西将等待服务器端脚本返回,而不是放大到下一行代码。我会延迟到成功处理程序,所以3秒计数开始后,你已经确认关闭命令发出。 –

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

@Steve,这可能是你想要做的最好的选择。 '10000'意味着延迟10秒,他将一个函数作为参数传递。 – f0x

+0

这是我想要实现的,但它不工作......它正在运行shutdown命令,但不更新div。 – Steve

+0

尝试调试它看看发生了什么,如果您使用的是Chrome或Firefox,请使用开发人员工具并使用断点来查看实际发生的事情:) – ebadedude

相关问题