0

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?

AndreaNobili
  • 40,955
  • 107
  • 324
  • 596

3 Answers3

6

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

T.J. Crowder
  • 1,031,962
  • 187
  • 1,923
  • 1,875
1

Just use javascript setTimeout

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

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

Victor
  • 8,309
  • 14
  • 80
  • 129
0

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);
        }
    });
}
oreopot
  • 3,392
  • 2
  • 19
  • 28