Shahin
Shahin

Reputation: 12851

Call jQuery Ajax Request Each X Minutes

How can I call an Ajax Request in a specific period of time? Should I use Timer Plugin or does jQuery have a plugin for this?

Upvotes: 64

Views: 138747

Answers (8)

Jithin B
Jithin B

Reputation: 1289

Instead of having an absolute repeating timer, you should call the function after completing the initial request (like a recursive function).

This ensures that requests will be sent only after completing the previous one. This avoids the issues like queuing up of requests and thereby Denial of Service.

(function ajaxRequest() {
  $.ajax('url_of_your_application.php', {
    type: 'post',
    data: {
      phone: '1234567890',
    },
  })
    .done(function (data) {
      // Do whatever you want with the data.
    })
    .always(function (data) {
      // We are starting a new timer only AFTER COMPLETING the previous request.
      setTimeout(ajaxRequest, 5000);
    });
})();

Upvotes: 0

santosh singh
santosh singh

Reputation: 28672

No plugin required. You can use only jquery.

If you want to set something on a timer, you can use JavaScript's setTimeout or setInterval methods:

setTimeout ( expression, timeout );
setInterval ( expression, interval );

Upvotes: 5

linslusa
linslusa

Reputation: 139

A bit late but I used jQuery ajax method. But I did not want to send a request every second if I haven't got the response back from the last request, so I did this.

function request(){
            if(response == true){
                // This makes it unable to send a new request 
                // unless you get response from last request
                response = false;
                var req = $.ajax({
                    type:"post",
                    url:"request-handler.php",
                    data:{data:"Hello World"}
                });

                req.done(function(){
                    console.log("Request successful!");

                    // This makes it able to send new request on the next interval
                    response = true;
                });
            }

            setTimeout(request(),1000);
        }

        request();

Upvotes: 13

Olotin Temitope
Olotin Temitope

Reputation: 419

I found a very good jquery plugin that can ease your life with this type of operation. You can checkout https://github.com/ocombe/jQuery-keepAlive.

$.fn.keepAlive({url: 'your-route/filename', timer: 'time'},       function(response) {
        console.log(response);
      });//

Upvotes: 1

Calvin Fan
Calvin Fan

Reputation: 61

you can use setInterval() in javascript

<script>
//Call the yourAjaxCall() function every 1000 millisecond
setInterval("yourAjaxCall()",1000);
function yourAjaxCall(){...}
</script>

Upvotes: 6

Gowri
Gowri

Reputation: 16845

use jquery Every time Plugin .using this you can do ajax call for "X" time period

$("#select").everyTime(1000,function(i) {
//ajax call
}

you can also use setInterval

Upvotes: 2

Ben
Ben

Reputation: 9895

You can use the built-in javascript setInterval.

var ajax_call = function() {
  //your jQuery ajax code
};

var interval = 1000 * 60 * X; // where X is your every X minutes

setInterval(ajax_call, interval);

or if you are the more terse type ...

setInterval(function() {
  //your jQuery ajax code
}, 1000 * 60 * X); // where X is your every X minutes

Upvotes: 147

JMP
JMP

Reputation: 7844

You have a couple options, you could setTimeout() or setInterval(). Here's a great article that elaborates on how to use them.

The magic is that they're built in to JavaScript, you can use them with any library.

Upvotes: 4

Related Questions