【发布时间】:2016-11-28 12:32:45
【问题描述】:
今天我正在为我尝试一个有点复杂的脚本。
我需要做的是在服务器关闭或返回任何类型的错误时更改来自服务器的 ajax 请求信息的时间间隔。这是最简单的部分,我已经有了:
request.fail(function(data) {
if(me.parentInterval) {
clearInterval(me.parentInterval);
me.startAutoRefresh(5000);
}
});
ConsoleDataTable.prototype.startAutoRefresh = function(time) {
var me = this;
if (time == null && time == undefined)
time = 1000;
me.parentInterval = setInterval(function() {
if (me.live) {
me.getData();
}
}.bind(me), time);
return me.parentInterval;
};
说明
函数 startAutoRefresh 设置一个归属于表的 parentInterval。该表每秒重新加载它的信息,但如果服务器关闭或其他情况,下一个请求必须等待 5 秒。
我现在要做的是:
如果请求延迟超过 5 次(或服务器返回错误 5 次),则下一个 me.startAutoRefresh 必须是增量的(2 次或 5 次,无所谓)。我如何从服务器获取失败并知道失败的时间?我尝试了一个变量 count++,每次输入请求时都会递增,但它不起作用。
我有一个“childTable”也需要重新加载它的信息。问题是当那个表请求失败时,它不会改变他的间隔。这里有它的代码。
ConsoleDataTable.prototype.addChildTable = function(params) {
request.done(function(data) {
me.childTableInterval = setInterval(function(rowClicked) {
//Some code not relevant now//
if (me.live && active) {
tabTable.getData();
}
}, 1000, rowClicked);
});
request.fail(function(data){
clearInterval(me.childTableInterval);
me.startAutoRefresh(5000);
})
图片来说明你
1-这是具有间隔的父表。 ChildTable undefined 很好,因为子表现在不存在。
2- childTable 存在。我知道它会丢弃一个未定义的,但它的出现是因为我首先清理了间隔以防止可能的重复间隔 ID。
3- 当我停止服务器时,第一个表(数据库)等待 5 秒,并且当 X 个错误(仅来自数据库,masterTable)被删除时,它必须是增量的。第二个表(childTable)也必须等待 5 秒,但它没有。
那么...我该怎么办?
我知道 addChildTableInterval 为 1000 并且 rowclicked 可能是问题所在,但我不知道如何更改它。
如何使请求递增?
更新:我解决了这个问题
解决了 2 个间隔的问题。说明?很容易。 如果您看一下我的代码,您会发现我有一个名为“ConsoleDataTable”的类。
当我访问 me.childTableInterval 时,我在 INSIDE ConsoleDatatable 中,但这不是我的目的!我想加入 addChildTable!所以我改变了对我的对象的调用......问题解决了! :D
您必须检查您当前的范围是否是您的目标范围。在其他情况下,你会遇到和我一样的问题。
【问题讨论】:
标签: javascript jquery ajax