I have a PHP process that takes a long time to run. I don't want the AJAX process that calls it to wait for it to finish. When the PHP process finishes it will set a field in a database. There should be some kind of AJAX polling call to check on the database field periodically and set a message.
How do I set up a jQuery AJAX call to poll rather than wait? Does the PHP script have to do anything special?
It's easier to have your server-side action, simply respond with a negative response until the value is ready and set up the client-side to repeatedly poll (with setTimeout()) until a positive response is received or a fixed number of failures is observed.
var timer;
var count = 0;
function poll(url) {
timer = setTimeout(function() {
$.ajax({
url: url,
success: function(data) {
if (data.Status) {
...do something...
}
else {
if (++count > 10) {
...failure action...
}
else {
poll(url);
}
}
...other options...
})
},5000)
}
Then on the server side use something that does (pseudocode) ...
if operation is not complete
return serialize( { Status : false } )
else
data = ....
data.Status = true
return serialize(data)
end
One quick workaround would be to create another PHP script which you can call that will check for that, since accessing DBs directly thru AJAX's comm method is not a good practice.
SetInterval('yourfunctionname',100)
so you can call the polling script.Do you mean usual polling (as opposed to long polling)? If yes, maybe this helps: http://jquery-howto.blogspot.com/2009/04/ajax-update-content-every-x-seconds.html
The PHP script would just check the database field, and return true/false immediately.
Step 1: The first call to the long running process - Set ignore_user_abort(true); in the PHP script which takes a long time and close the connection.
Step 2: Check if the DB field is updated using the methods suggested.