Steve
Steve

Reputation: 596

JQuery SetTimeout before running code

I'm trying to run a function in JQuery that basically shuts down or starts up a server. The code I have so far is this -

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

The problem is obviously it stops the server fine but it updates the status div ('#test'+this.name) straight away. This is no good because the server takes a period of time to shut down. I've been trying to get SetTimeout to work but can't figure it out... Any help would be appreciated.

Thanks guys, you're the best :)

UPDATE:

Full functions are here:

$(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

Given up on the idea of it, instead the status is polled for every second instead.

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

});
}, 1000);

Upvotes: 0

Views: 1093

Answers (3)

cillierscharl
cillierscharl

Reputation: 7117

I've added a quick sample of wrapping the function in a setTimeout

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

JSFiddle DEMO

Upvotes: 2

ebadedude
ebadedude

Reputation: 161

I dont know if you will get a response from 'controller.php' when the server actually shuts down, in case you don't, try this...

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

Upvotes: 2

Marc B
Marc B

Reputation: 360692

ajax calls are asynchronous. the $.post() call returns immediately and lets the actual post work be done in the background. either change it to a synchronous call (usually not a good idea), or put the subsequent code in the "success" part of the .post call, e.g.

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

Upvotes: 1

Related Questions