AndreaNobili
AndreaNobili

Reputation: 42957

How can I perform this JavaScript call after a delay time?

I am pretty new in JavaScript and I have to perform an operation after some time that another previous operation is performed.

So I have this function:

function validaProgetti() {

     $.ajax({
           type: "POST",
           //data: {'checkedRowList' : checkedRowList},
           data: JSON.stringify(checkedRowList),
           url: "validaProgetti",
           contentType:"application/json"

        }).done(function(response) {
            $('.modal').modal('hide');
            sostituisciFrammentoJsp('outputRicerca', response);

            //alert("SUCCESS");

        }).error(function(xhr) {
            alert("ERROR");
            manageError(xhr);
        });

}

As you can see into the done() body I have these 2 call:

$('.modal').modal('hide');
sostituisciFrammentoJsp('outputRicerca', response);

I need that the sostituisciFrammentoJsp() execution is performed after 3 seconds of delay to ensure that the previoius function is complete.

How can I correctly set a delay for this function?

Upvotes: 0

Views: 81

Answers (3)

oreopot
oreopot

Reputation: 3450

Option : 1

clearTimeout(window.timer);
window.timer=setTimeout(function(){ // setting the delay for each keypress
                ajaxSearchRequest($type); //runs the ajax request

        }, 3000);

Option : 2

// set your delay here, 2 seconds as an example...
var my_delay = 2000;

// call your ajax function when the document is ready...
$(function() {
    callAjax();
});

// function that processes your ajax calls...
function callAjax() {
    $.ajax({
        // ajax parameters here...
        // ...
        success: function() {
            setTimeout(callAjax, my_delay);
        }
    });
}

Upvotes: 0

T.J. Crowder
T.J. Crowder

Reputation: 1074148

...after 3 seconds of delay to ensure that the previoius function is complete.

Let's do better than that, and actually wait for the previous function to complete:

$('.modal').modal('hide').one("hidden.bs.modal", function() {
    sostituisciFrammentoJsp('outputRicerca', response);
});

(Note I used one, not on, so the handler gets autoremoved after the event occurs.)

Note that I've assumed there you're using a Bootstrap modal, but other "modal" libraries will offer a similar event or callback.

But answering the question you actually asked, you can set up a callback after three seconds with setTimeout:

$('.modal').modal('hide');
setTimeout(function() {
    sostituisciFrammentoJsp('outputRicerca', response);
}, 3000);

The number at the end is in milliseconds (thousanths of a second).

Upvotes: 6

Victor
Victor

Reputation: 8480

Just use javascript setTimeout

setTimeout(function(){
    // your code here
}, timeInMillis);

Using this command will schedule an operation for the time you pass.

Upvotes: 1

Related Questions