luci-base: extend xhr.js
Add timeout options to get() and post() and introduce XHR.stop() to support stopping a poll operation. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
parent
65479e3236
commit
aa6c97154e
1 changed files with 28 additions and 6 deletions
|
@ -39,7 +39,7 @@ XHR = function()
|
||||||
this._xmlHttp.abort();
|
this._xmlHttp.abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.get = function(url,data,callback)
|
this.get = function(url,data,callback,timeout)
|
||||||
{
|
{
|
||||||
this.reinit();
|
this.reinit();
|
||||||
|
|
||||||
|
@ -54,6 +54,9 @@ XHR = function()
|
||||||
else
|
else
|
||||||
url += '?' + code;
|
url += '?' + code;
|
||||||
|
|
||||||
|
if (!isNaN(timeout))
|
||||||
|
xhr.timeout = timeout;
|
||||||
|
|
||||||
xhr.open('GET', url, true);
|
xhr.open('GET', url, true);
|
||||||
|
|
||||||
xhr.onreadystatechange = function()
|
xhr.onreadystatechange = function()
|
||||||
|
@ -76,7 +79,7 @@ XHR = function()
|
||||||
xhr.send(null);
|
xhr.send(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.post = function(url,data,callback)
|
this.post = function(url,data,callback,timeout)
|
||||||
{
|
{
|
||||||
this.reinit();
|
this.reinit();
|
||||||
|
|
||||||
|
@ -89,6 +92,9 @@ XHR = function()
|
||||||
callback(xhr);
|
callback(xhr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!isNaN(timeout))
|
||||||
|
xhr.timeout = timeout;
|
||||||
|
|
||||||
xhr.open('POST', url, true);
|
xhr.open('POST', url, true);
|
||||||
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
|
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
|
||||||
xhr.send(code);
|
xhr.send(code);
|
||||||
|
@ -168,7 +174,7 @@ XHR.get = function(url, data, callback)
|
||||||
(new XHR()).get(url, data, callback);
|
(new XHR()).get(url, data, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
XHR.poll = function(interval, url, data, callback)
|
XHR.poll = function(interval, url, data, callback, post)
|
||||||
{
|
{
|
||||||
if (isNaN(interval) || interval < 1)
|
if (isNaN(interval) || interval < 1)
|
||||||
interval = 5;
|
interval = 5;
|
||||||
|
@ -181,22 +187,38 @@ XHR.poll = function(interval, url, data, callback)
|
||||||
for (var i = 0, e = XHR._q[0]; i < XHR._q.length; e = XHR._q[++i])
|
for (var i = 0, e = XHR._q[0]; i < XHR._q.length; e = XHR._q[++i])
|
||||||
{
|
{
|
||||||
if (!(XHR._t % e.interval) && !e.xhr.busy())
|
if (!(XHR._t % e.interval) && !e.xhr.busy())
|
||||||
e.xhr.get(e.url, e.data, e.callback);
|
e.xhr[post ? 'post' : 'get'](e.url, e.data, e.callback, e.interval * 1000 - 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
XHR._t++;
|
XHR._t++;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
XHR._q.push({
|
var e = {
|
||||||
interval: interval,
|
interval: interval,
|
||||||
callback: callback,
|
callback: callback,
|
||||||
url: url,
|
url: url,
|
||||||
data: data,
|
data: data,
|
||||||
xhr: new XHR()
|
xhr: new XHR()
|
||||||
});
|
};
|
||||||
|
|
||||||
|
XHR._q.push(e);
|
||||||
XHR.run();
|
XHR.run();
|
||||||
|
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
|
XHR.stop = function(e)
|
||||||
|
{
|
||||||
|
for (var i = 0; XHR._q && XHR._q[i]; i++) {
|
||||||
|
if (XHR._q[i] === e) {
|
||||||
|
e.xhr.cancel();
|
||||||
|
XHR._q.splice(i, 1);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
XHR.halt = function()
|
XHR.halt = function()
|
||||||
|
|
Loading…
Reference in a new issue