Reputation: 12851
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
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
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
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
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
Reputation: 61
you can use setInterval()
in javascript
<script>
//Call the yourAjaxCall() function every 1000 millisecond
setInterval("yourAjaxCall()",1000);
function yourAjaxCall(){...}
</script>
Upvotes: 6
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
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
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