xhr returns 503 时如何自动重新运行 ajax 调用
How to automatically rerun ajax call when xhr returns 503
在我的应用程序中,我使用 AJAX get 请求调用在 AWS 中使用 API 网关配置的 API。有时,当 API 有一段时间没有被调用时,它会出现 503 错误,因为服务器正试图再次启动。我希望能够在返回 503 错误时自动重新运行 ajax 调用,因为服务器正在尝试启动。
我不确定要在错误函数中包含什么。我测试了它并警告说如果调用 returns 出现 503 错误则失败,但我不确定要包含什么以自动重新运行调用
非常感谢有关如何实现这一目标的任何建议!谢谢!
$(".apiGateway").on("click", function (e) {
e.preventDefault();
$.ajax({
url: 'apiGatewayURL',
method: 'GET',
error: function (xhr) {
if (xhr.status === 503) {
alert('fail')
}
}
})
})
您可以创建一个函数并在出错时再次调用它,但您需要考虑如果服务器继续发送 503 会产生无限循环:
function sendAjax(url, method, body, callback) {
$.ajax({
url: url,
method: method,
error: function (xhr) {
if (xhr.status === 503) {
sendAjax(url, method, body, callback);
}
}
})
}
使用$.ajax(this);
您必须为 API 调用设置所需的最大重试次数,否则您的代码将不会停止尝试:)
$(".apiGateway").on("click", function (e) {
let maxAttempts = 5,
countAttempts = 0;
e.preventDefault();
$.ajax({
url: 'apiGatewayURL',
method: 'GET',
error: function (xhr) {
if (xhr.status === 503 && countAttempts < maxAttempts) {
alert('fail');
++countAttempts;
$.ajax(this);
}
}
});
});
在我的应用程序中,我使用 AJAX get 请求调用在 AWS 中使用 API 网关配置的 API。有时,当 API 有一段时间没有被调用时,它会出现 503 错误,因为服务器正试图再次启动。我希望能够在返回 503 错误时自动重新运行 ajax 调用,因为服务器正在尝试启动。
我不确定要在错误函数中包含什么。我测试了它并警告说如果调用 returns 出现 503 错误则失败,但我不确定要包含什么以自动重新运行调用 非常感谢有关如何实现这一目标的任何建议!谢谢!
$(".apiGateway").on("click", function (e) {
e.preventDefault();
$.ajax({
url: 'apiGatewayURL',
method: 'GET',
error: function (xhr) {
if (xhr.status === 503) {
alert('fail')
}
}
})
})
您可以创建一个函数并在出错时再次调用它,但您需要考虑如果服务器继续发送 503 会产生无限循环:
function sendAjax(url, method, body, callback) {
$.ajax({
url: url,
method: method,
error: function (xhr) {
if (xhr.status === 503) {
sendAjax(url, method, body, callback);
}
}
})
}
使用$.ajax(this);
您必须为 API 调用设置所需的最大重试次数,否则您的代码将不会停止尝试:)
$(".apiGateway").on("click", function (e) {
let maxAttempts = 5,
countAttempts = 0;
e.preventDefault();
$.ajax({
url: 'apiGatewayURL',
method: 'GET',
error: function (xhr) {
if (xhr.status === 503 && countAttempts < maxAttempts) {
alert('fail');
++countAttempts;
$.ajax(this);
}
}
});
});