Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 处理非';使用jQuery.when时浏览器发送的_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 处理非';使用jQuery.when时浏览器发送的

Javascript 处理非';使用jQuery.when时浏览器发送的,javascript,jquery,ajax,Javascript,Jquery,Ajax,编辑 好的,所以我最终使用了axios。它可以正确地处理一切,即使是连接超时错误,$无法处理 我避免使用axios,因为我的应用程序中已经有了jQuery 我正在使用$.when等待动态数量的ajax请求。如果发送了所有请求(完成或失败),代码工作正常,但我注意到如果一个请求被阻止(例如,由于CORS策略,chrome阻止了一个请求),则$。当似乎失败时,即使其他请求尚未完成,代码也会运行 devices.forEach((设备)=>{ 请求推送( $.ajax({ url:`http://$

编辑

好的,所以我最终使用了axios。它可以正确地处理一切,即使是连接超时错误,
$无法处理

我避免使用axios,因为我的应用程序中已经有了jQuery


我正在使用
$.when
等待动态数量的ajax请求。如果发送了所有请求(完成或失败),代码工作正常,但我注意到如果一个请求被阻止(例如,由于CORS策略,chrome阻止了一个请求),则
$。当
似乎失败时,即使其他请求尚未完成,代码也会运行

devices.forEach((设备)=>{
请求推送(
$.ajax({
url:`http://${device.ip_address}:3000/s`,
键入:“获取”,
超时:3000,
})
.done((数据、文本状态、xhr)=>{
有效设备推送(设备);
})
.失败((数据、文本状态、xhr)=>{
死设备。推(设备);
})
);
})
$.when.apply(null,requestArr).always(函数(){
日志(“活动设备:+aliveDevices.length”);
日志(“死设备:+deadDevices.length”);
});
在我当前的测试中,我有4个请求,2个请求可以正常运行,1个请求失败,1个请求由于CORS策略被chrome阻止。正如您在这幅图中所看到的,预期的输出被假定为活动2,死亡2,或者至少如果请求没有发送,那么活动2,死亡1。

在第二幅图中,我删除了对URL的请求,该URL被阻止。现在我得到了正确的输出


这就是$.when的工作原理:“当所有延迟解决时,该方法将立即解决其主延迟,或者当其中一个延迟被拒绝时,该方法将立即拒绝该主延迟。”这是否回答了您的问题@Cully不,我尝试了这个问题的答案,但如果其中一个请求被阻止,我仍然无法获得预期的输出。那么,是否仍有方法确定某个请求是否被浏览器阻止?您可能希望更新您的问题,以包含您尝试过的代码。@Cully谢谢您的帮助。我只是使用了axios,试图避免使用它,因为我的应用程序已经有了jQuery。这就是$.when的工作原理:“当所有延迟解决时,该方法将立即解决其主延迟,或者当其中一个延迟被拒绝时,该方法将立即拒绝该主延迟。”这是否回答了您的问题@Cully不,我尝试了这个问题的答案,但如果其中一个请求被阻止,我仍然无法获得预期的输出。那么,是否仍有方法确定某个请求是否被浏览器阻止?您可能希望更新您的问题,以包含您尝试过的代码。@Cully谢谢您的帮助。我只是使用了axios,试图避免使用它,因为我的应用程序已经有了jQuery。