碰到一个问题是这样的,有个老项目,用的jquery进行发送请求,因为环境网络不稳定之类的,会有偶然性的请求失败,SSL连接失败,没有状态码,只要重新发送就能正常了。所以期望能做到如果请求响应失败,且没有状态码时,请求能否每隔半秒自动重试3次。如下代码,在重试期间fail、error、always等回调逻辑不会被触发。
$.ajax({ url: 'http://localhost:3000/custom-response', success: () => console.log('cb,success'), fail: () => console.log('cb,fail'), error: () => console.log('cb,error')}).always( () => console.log('chain,always')).done(() => { () => console.log('chain,done')}).error(() => { () => console.log('chain,done')})
试过使用 $.ajaxPrefilter 和 $.ajaxSetup 对error、fail等进行重写,看似成功了一半,可是always没法被覆盖。jquery源码逻辑太长没看太懂,不知道从何改起。不知道有没已有的方案
可以看看这个项目
https://github.com/unjs/ofetch#%EF%B8%8F-auto-retry
你的问题确实很有挑战性,因为 jQuery 的 $.ajax
请求默认情况下并没有提供自动重试的机制。不过,你可以通过组合使用 setTimeout
和 $.ajax
的方式来实现自动重试。以下是一个简单的实现示例:
function retryRequest(options, retriesLeft) { // 如果 retriesLeft 小于 0,则不再重试 if (retriesLeft < 0) { if (options.error) { options.error(jqXHR, textStatus, errorThrown); } return; } // 发送 AJAX 请求 $.ajax(options) .done(function() { // 请求成功,无需重试 retryRequest(options, -1); }) .fail(function(jqXHR, textStatus, errorThrown) { // 请求失败,稍后重试 var statusCode = jqXHR.status; if (statusCode && statusCode !== 0) { // 如果请求返回了状态码,则可能不是网络问题,停止重试 retryRequest(options, -1); } else { // 请求失败且没有状态码,稍后重试 retryRequest(options, retriesLeft - 1); // 重试间隔为半秒 setTimeout(function() { retryRequest(options, retriesLeft - 1); }, 500); } });}// 使用示例retryRequest($.ajax({ url: 'http://localhost:3000/custom-response', success: () => console.log('cb,success'), error: () => console.log('cb,error')}), 3); // 最多重试3次
在这个示例中,retryRequest
函数接收两个参数:一个 options
对象和一个 retriesLeft
整数。options
对象包含了 $.ajax
的配置选项,而 retriesLeft
表示剩余的重试次数。如果 retriesLeft
小于 0,则停止重试。如果请求成功,则停止重试。如果请求失败且没有状态码,则稍后重试。每次重试之间等待半秒。
问题内容: 我已经看到您可以指定如果ajax请求失败通常要做什么,是否可以让它在某种循环中重试,以便它在停止之前尝试至少x次?我以前使用过此代码: 这将适用于所有AJAX请求(如果我输入错了,请纠正我)。 我想做这样的事情: 这行得通吗?甚至更好:这是正确的方法吗?我会将重试包装在计数系统中,以便不会无限重试。在我的应用程序中,十分之九会正常工作,但是我经常与之交互的API之一有时会返回错误。 任
问题内容: IE中的以下AJAX调用失败。 错误函数返回 没有向服务器发出请求,因此我认为JSON没有问题。 已修复,请参阅#1351389 问题答案: 固定,我将content-type从更改为just plain 。 我讨厌IE :) 另外,为了避免IE超级缓存,请尝试以下操作: 这样,每个请求都是IE获得:D的新网址
问题内容: 我正在编写一些重新连接逻辑,以定期尝试建立与发生故障的远程端点的连接。本质上,代码如下所示: 我已经在很多情况下使用类似于上面的代码解决了这个普遍的问题,但是我对结果不满意。是否有设计用于解决此问题的设计模式? 问题答案: 值得结帐的一个库是Sarge,它会根据已定义的计划自动执行重试。
鸿蒙arkts 请求失败了 mock 请求地址:https://dummyjson.com/quotes axios 发起请求 官网Http库
这一条给出: 这个: 我想做的是避免为所有测试编写完整的jsons,如果我可以跳过所有“”和{},将会更快。我的方法正确吗?
我对Docker很陌生,尝试用普通html构建Docker图像,但我有一条错误消息,说用前端dockerfile解决问题失败。v0:无法读取dockerfile:open/var/lib/docker/tmp/buildkit-mount602954594/dockerfile:没有这样的文件或目录 我的文件夹目录如下 在Dockerfile里面,我有 我做了我的命令docker构建。在目录C:\