2016-09-20 146 views
1

如果我在第一个请求的回调中完全相同的ajax请求,则第二个请求的回调不会触发。

function doCall(){ 
console.log('1'); 
$.ajax(
    'InfoRequest.cgi?reqType=rxChanNames&deviceName=Ultimo-0700b9' 
) 
.always(function(d){ 
    console.log('success1');   
    $.ajax(
     'InfoRequest.cgi?reqType=rxChanNames&deviceName=Ultimo-0700b9' 
    ) 
    .always(function(d2){ 
     console.log('success2');       
    });    
}); 
} 

第二个调用已完成,200从服务器响应,但'success2'从不打印。 对于请求的响应是JSON:

{"data":[],"status":"wserrortimeout"} 

如果我改变第二请求到

'InfoRequest.cgi?reqType=rxChanNames&deviceName=Ultimo-0700b8' 

然后它触发回调。

在任何人问我为什么要这样做的时候,我在这里概述的是我实际上在做什么的一个简化版本,它仍然证明了这个问题。该应用程序位于嵌入式硬件上,有时会响应错误,在这种情况下请求需要重试。

在此先感谢您的任何建议。

+0

为什么不检查错误,然后再次提出请求 –

+1

这就是我在实际应用中所做的。同样的事情发生。如果中间有一个不同的请求,那么一切都很好,但如果同一个请求是在一行中完成的,那么第二个请求就没有回调。 – njc

+0

您可以在浏览器开发工具中查看网络选项卡。第二个请求是否真的完成了,并且有回应吗? – mm759

回答

1

更改参数使得调用工作导致我相信这是一个缓存问题。

在ajax参数中使用cache:false来防止缓存。

-1

您在javascript中没有问题。如果您将请求转发到其他地方或某些您没有将响应发送回来,您可能需要查看CGI代码。