【发布时间】:2013-11-14 04:07:00
【问题描述】:
我有一个 jquery-ajax 调用控制器中的一个动作。有时通话失败,所以我想重试一次。
jQuery-ajax:
return ajax({
url: getRootDir() + urlDoTask, // urlDoTask is something like "/Action/"
data: { param: someParam },
type: 'POST',
dataType: 'json',
tryCount: 0,
retryLimit: 3
}).then(function (data) {
// Do some stuff
return ....
}, function (xhr, textStatus, errorThrown) {
if (textStatus == 'timeout' || (xhr.responseText == "" && textStatus == 'error')) {
this.tryCount++; // this is always 1
if (this.tryCount <= this.retryLimit) {
//try again
$.ajax(this);
return;
}
return; // this point is never reached
}
if (xhr.status == 404) {
// Do some stuff
}
return ... // I want to reach it after this.tryCount > this.retryLimit
});
function getRootDir() {
var loc = window.location.pathname;
var dir = loc.substring(0, loc.lastIndexOf('/'));
return dir;
}
上面的代码不起作用,每次ajax调用失败时tryCount总是1。此外,一旦 this.tryCount 大于 this.retryLimit,就永远不会到达最后的返回值。
想法?
【问题讨论】:
-
您可以在下面查看我的评论,了解它发生的原因。但我建议您重试整个 ajax 调用,而不是在其中。这样,您就可以拥有一个外部有状态对象来管理您的重试控件。
-
也许可以尝试stackoverflow.com/a/10024557/694325 中的符号 - 我不确定该符号是否与范围或其他内容混淆。您设法解决了这个问题吗?
标签: javascript jquery