2016-09-20 138 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代碼。