using SetTimeout with Ajax calls

前端 未结 1 1127
情书的邮戳
情书的邮戳 2020-12-14 11:34

I am trying to use setTimeout to check if data exists in a table:

If the data exists don\'t fetch data. If the data des not exist fetch the data using load and then

相关标签:
1条回答
  • 2020-12-14 12:01

    Something like this should work, the first snippet is localized so I could test run it. I've explained the code and below it is what your code should be

    Like you realized (from your update on your post) setTimeout only calls your target function once, so to keep checking you need to call it again if you do a check that fails.

    See it on JsFiddle : http://jsfiddle.net/jQxbK/

    //we store out timerIdhere
    var timeOutId = 0;
    //we define our function and STORE it in a var
    var ajaxFn = function () {
            $.ajax({
                url: '/echo/html/',
                success: function (response) {
                    if (response == 'True') {//YAYA
                        clearTimeout(timeOutId);//stop the timeout
                    } else {//Fail check?
                        timeOutId = setTimeout(ajaxFn, 10000);//set the timeout again
                        console.log("call");//check if this is running
                        //you should see this on jsfiddle
                        // since the response there is just an empty string
                    }
                }
            });
    }
    ajaxFn();//we CALL the function we stored 
    //or you wanna wait 10 secs before your first call? 
    //use THIS line instead
    timeOutId = setTimeout(ajaxFn, 10000);
    

    Your code should look like this :

    var timeOutId = 0;
    var ajaxFn = function () {
            $.ajax({
                url: 'CheckIfDataExists/' + new Date().getTime(),
                success: function (response) {
                    if (response == 'True') {
                        $('.DataDiv').
                        load('GetFreshData/' + new Date().
                                getTime(), { "Id": $("#RowID").val() });
                         clearTimeout(timeOutId);
                    } else {
                        timeOutId = setTimeout(ajaxFn, 10000);
                        console.log("call");
                    }
                }
                });
    }
    ajaxFn();
    //OR use BELOW line to wait 10 secs before first call
    timeOutId = setTimeout(ajaxFn, 10000);
    
    0 讨论(0)
提交回复
热议问题