gpt4 book ai didi

jquery - 用jquery-ajaxq实现重试逻辑的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-03 08:57:01 31 4
gpt4 key购买 nike

我们正在使用jquery-ajaxq阻止特定请求同时运行。它工作得很好,除了我们客户的网络糟透了。我们经常会看到HTTP状态代码为0的超时或错误,它表示连接失败或请求取消。在特定情况下,状态码为0时,我们希望重试x次,然后放弃并向用户显示错误消息。

seems to indicate展示了如何使用$.ajax(this)来执行此操作,但由于我们使用的是ajaxq,因此在这里不起作用。

这是我们的代码现在如何工作的概述:

doAjax = function(incomingOpts) {
// do some option defaulting here
//...

var options = {
//...
success: function(data, textStatus, jqXHR) {
// basically, if we get here, we could still have an app
// level error so we check for that and call the appropriate
// callback
if ( blah blah ) {
incomingOpts.handleSuccess(data);
else
incomingOpts.handleError(data);
},
error: function(jqXHR, textStatus, errorThrown) {
// throw up a big error dialog to the user with
// as much data as we can include about what happened
//...
}
};

_.extend(options, incomingOpts);
return $.ajaxq(options.url.substring(0, 30), options);
};

在error方法中很容易确定上面的error函数中我们要重试的条件:
if ( textStatus === "error" && errorThrown === "" && jqXHR.status === "0" ) {
// then we want to retry
}

我们遇到的问题是如何实现重试逻辑。此外,我们还需要确保如果所有调用均失败,则堆栈中只有一个调用可以记录错误,并确保只有一个调用如果重试之一确实有效,则具有适当的成功功能。

最佳答案

我认为这是ajaxq插件的缺陷。应该将回调的上下文设置为options对象或指定的上下文。我将通过修改插件的第41行使其与此类似(未测试)来解决此问题:

var context = options.context || options;
if (originalCompleteCallback) {
originalCompleteCallback.call(context, request, status);
}

现在,您可以使用 this作为原始选项集完整地解决它,然后可以使用与链接的答案相同的思想来重用该请求以重新发送请求。

关于jquery - 用jquery-ajaxq实现重试逻辑的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21469254/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com