javascript - 使用 jQuery.when 处理浏览器未发送的请求
问题描述
编辑
好的,所以我最终使用了 axios。它可以正确处理所有内容,甚至是$.when
.
我避免使用 axios,因为我的应用程序中已经有 jQuery。
我$.when
用来等待动态数量的 ajax 请求。如果所有请求都已发送(完成或失败),则代码工作正常,但我注意到如果一个请求被阻止(例如,chrome 由于 CORS 策略阻止了一个请求),那么$.when
即使其他请求没有完成,它似乎也会失败并且只会运行然而。
devices.forEach((device) => {
requestArr.push(
$.ajax({
url: `http://${device.ip_address}:3000/s`,
type: "GET",
timeout: 3000,
})
.done((data, textStatus, xhr) => {
aliveDevices.push(device);
})
.fail((data, textStatus, xhr) => {
deadDevices.push(device);
})
);
})
$.when.apply(null, requestArr).always(function () {
console.log("Alive Devices: " + aliveDevices.length);
console.log("Dead Devices: " + deadDevices.length);
});
在我当前的测试中,我有 4 个请求,2 个请求会正常运行,1 个会失败,1 个会因为 CORS 策略而被 chrome 阻止。正如你在这张图片中看到的,预期的输出应该是 Alive 2, Dead 2,或者至少如果请求没有被发送,那么 Alive 2, Dead 1。
在第二张图片中,我删除了对被阻止的 URL 的请求。现在我得到了正确的输出。
解决方案
推荐阅读
- node.js - 如何在没有 dotenv 的情况下运行项目?
- javascript - 如何组合不同对象中的数组对象
- python - 努力理解 Python 输出(Unicode、UTF-8、不同的 Python 版本)
- javascript - 如何在 Eclipse 中从另一个 JavaScript 文件导入 JavaScript 方法
- php - Symfony 5 Form 类实体管理器
- excel - Excel的谷歌翻译功能不起作用
- php - 所有 Drupal 管理页面返回状态 404
- excel - VBA:打开多个excel文件时引用一个excel文件
- python - Python Matplotlib 图例颜色无法正常工作
- apache-spark - groupBy 的 Java Spark 替代方案