Ajaxjavascriptpolling
// ajax support for long running requests from client to server or out-of-band requests from server to client
var server_response;
var dying = false;
var request_count = 0;
// declared in ajax.js, but put it here, too to make sure we have it
function createRequest()
{
var req;
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
return req;
}
function openResponseConnection(count)
{
if (!server_response) {
server_response = createRequest();
}
if (server_response) {
server_response.onreadystatechange = processResponse;
var loc = document.location.toString();
if (loc.indexOf('?') != -1) {
loc = loc.substr(0,loc.indexOf('?'));
}
server_response.open("GET", loc+"?_action_=ajax_response&req_count="+count.toString(), true);
server_response.send(null);
}
}
function processResponse()
{
var wait = (3 + Math.random() * 5); // 3 - 8 seconds
if (server_response.readyState == 4) {
if (server_response.status == 200) {
try {
eval(server_response.responseText);
} catch(e) {
; // ignore errors
}
if (!dying) {
request_count += 1;
setTimeout("openResponseConnection(request_count)",wait*1000); // reopen the response connection
}
}
}
}
function shutdown()
{
if (server_response) {
server_response.abort();
}
dying = true;
}
var userAgent = navigator.userAgent.toLowerCase()
if (userAgent.indexOf("msie") != -1) {
/* IE specific stuff */
/* Abort last request so we don't 'leak' connections */
window.attachEvent("onbeforeunload", shutdown )
/* Set unload flag */
} else if (document.implementation && document.implementation.createDocument) {
/* Mozilla specific stuff (onbeforeunload is in v1.7+ only) */
window.addEventListener("beforeunload", shutdown, false)
}
// open initial connection back to server
openResponseConnection(request_count);