2016-09-20 3 views
1

Wenn ich die gleiche AJAX-Anfrage in der Rückruf von der ersten Anfrage, wird der Rückruf für die zweite Anfrage nicht ausgelöst.

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');       
    });    
}); 
} 

Der zweite Anruf wird getätigt, und eine 200 antwortet vom Server, aber "success2" wird nie gedruckt. Die Antwort für die Anfrage ist JSON:

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

Wenn ich die zweite Anforderung an

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

dann den Rückruf ändern abfeuert.

Bevor jemand fragt, warum ich das machen möchte, ist das, was ich hier beschrieben habe, eine viel vereinfachte Version dessen, was ich gerade tue, das immer noch das Problem demonstriert. Die Anwendung ist auf eingebetteter Hardware, die manchmal mit einem Fehler antwortet, in welchem ​​Fall die Anforderung wiederholt werden muss.

Vielen Dank im Voraus für Anregungen.

+0

warum überprüfen Sie nicht für den Fehler und dann die Anfrage erneut –

+1

Das ist, was ich in der tatsächlichen Anwendung tue. Das Gleiche passiert. Wenn eine andere Anforderung dazwischen liegt, ist alles in Ordnung, aber wenn die gleiche Anforderung in einer Reihe erfolgt, gibt es keine Rückrufe für die zweite Anforderung. – njc

+0

Sie können die Registerkarte Netzwerk in Browser-Entwicklungstools überprüfen. Wird die zweite Anfrage tatsächlich durchgeführt und gibt es eine Antwort? – mm759

Antwort

1

Die Tatsache, dass die Änderung eines Parameters die Call-Funktion macht, führt mich zu der Annahme, dass es sich um ein Cache-Problem handelt.

Verwenden Sie in den Ajax-Parametern cache:false, um Zwischenspeichern zu verhindern.

-1

Es gibt kein Problem in dir Javascript. Möglicherweise müssen Sie den CGI-Code aussehen, wenn Sie die Anfrage an einige wo oder wie Sie die Antwort zurück senden nicht weiterleiten.