JavaScript:为 jquery ajax 重试添加延迟
JavaScript: Add delay to a jquery ajax retry
我有以下结构的代码。目的是发送一个 Ajax 请求,并在每次尝试之间延迟重试几次:
$.ajax({
type: 'GET',
url: 'https://example.com',
retryLimit: 3,
attempt: 1,
success: function (data) {
doStuff();
},
error: function (data) {
if (this.attempt++ <= this.retryLimit) {
var retry = function () {
$.ajax(this);
};
setTimeout(retry, 1000);
} else {
handleError();
}
}
});
问题是我在尝试调用 $.ajax
时收到 TypeError: Illegal invocation
。我还尝试用 promises 替换,如下所示:
new Promise(function(resolve) {
setTimeout(resolve, 1000);
}).then(function() {
$.ajax(this);
});
但是我得到了同样的错误。这是怎么回事,我该如何解决?
注意:我正在使用 Atlassian SDK 构建 Jira 插件,所以我的 javascript 版本似乎受到限制。我不是 100% 确定 我有哪个 版本,但我知道当我尝试使用箭头函数时它无法编译。
this
的上下文在 retry()
函数执行时已经改变,不再是 AJAX 信息。但是,您应该能够使用变量将其包装在闭包中:
var self = this;
var retry = function () {
$.ajax(self);
};
(请注意,整个上下文本身也在回调中发生,error
。因此,如果 this
仍然不是您需要的,您可能需要应用相同的概念另一个更高的范围。)
我有以下结构的代码。目的是发送一个 Ajax 请求,并在每次尝试之间延迟重试几次:
$.ajax({
type: 'GET',
url: 'https://example.com',
retryLimit: 3,
attempt: 1,
success: function (data) {
doStuff();
},
error: function (data) {
if (this.attempt++ <= this.retryLimit) {
var retry = function () {
$.ajax(this);
};
setTimeout(retry, 1000);
} else {
handleError();
}
}
});
问题是我在尝试调用 $.ajax
时收到 TypeError: Illegal invocation
。我还尝试用 promises 替换,如下所示:
new Promise(function(resolve) {
setTimeout(resolve, 1000);
}).then(function() {
$.ajax(this);
});
但是我得到了同样的错误。这是怎么回事,我该如何解决?
注意:我正在使用 Atlassian SDK 构建 Jira 插件,所以我的 javascript 版本似乎受到限制。我不是 100% 确定 我有哪个 版本,但我知道当我尝试使用箭头函数时它无法编译。
this
的上下文在 retry()
函数执行时已经改变,不再是 AJAX 信息。但是,您应该能够使用变量将其包装在闭包中:
var self = this;
var retry = function () {
$.ajax(self);
};
(请注意,整个上下文本身也在回调中发生,error
。因此,如果 this
仍然不是您需要的,您可能需要应用相同的概念另一个更高的范围。)