jquery Schlaf nicht ausführen, ajax-Aufruf
Habe ich ein Ajax-request warten auf die Antwort aus einem anderen Prozess.
function test() {
var flag = 0;
while (flag === 0) {
$.ajax({
url: "cs/CheckForProcess",
async: false,
success: function(data) {
if (data !== 'NotReady') {
$('#results').html(data);
flag = 1;
} else {
$('#results').html('<h1>Processing...</h1>');
setTimeout(function() {
}, 6000);
}
}
});
}
}
das problem ist, dass die setTimout nicht funktioniert obwohl ich sehe im debug-Modus, dass die else-Bedingung ausgeführt wird.
BEARBEITEN:
ich will den nächsten ajax-request gesendet werden, nur 6 Sekunden nach der überprüfung der Prozess ist noch nicht bereit.
was bin ich?
Thx.
- Es gibt nichts in Ihrem
setTimeout
Funktion. Was wollen Sie da tun? - nur schlafen....ist das nicht die standard-syntax für das schlafen?
- setTimeout ist eine asynchrone Funktion. Es tut nicht pause, Ihr Skript. Ihr Skript wird weiterhin ausgeführt (und 6000ms später Ihre setTimeout callback-Funktion wird ausgeführt.
- Können Sie uns sagen, genau das, was Sie zu tun versuchen ?
- Was genau wollen Sie tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
setTimeout ist eine asynchrone Funktion. Es tut nicht pause, Ihr Skript. Ihr Skript wird weiterhin ausgeführt (und 6000ms später Ihre setTimeout callback-Funktion wird ausgeführt).
Kann man mit setInterval zu überprüfen zu halten für die andere Bedingung, um wahr zu sein.
Könnte man wahrscheinlich entfernen, async:false, indem Sie den überblick über Ihre server-Antwort an anderer Stelle. Sobald Sie einen erfolgreichen Rückruf, dann sollten Sie das Intervall abzubrechen.
Javascript nicht die Möglichkeit haben zu schlafen (z.B. sperren oder blockieren die Ausführung von javascript) mit setTimeout.
Einen
setTimeout()
plant eine Funktion, die irgendwann in der Zukunft und anderen javascript nur glücklich hält während dieser Zeit läuft.Was Sie tun sollten, ist die Verwendung
setTimeout()
Zeitplan die nächste Ausführung des ajax-Funktion, wenn die Daten noch nicht bereit war. Also, wenn es keine Daten bereit, planen Sie den nächsten ajax-call für 6 Sekunden, aber wenn man die Daten, die Sie gerade die Daten verarbeiten und Sie sind fertig.Zusätzlich Sie wirklich nicht wollen, zu verwenden
async: false
denn das friert der browser (nicht zulassen, dass eine andere Verarbeitung durchgeführt) während der ajax-Aufruf. Das gleiche Vorgang geschrieben werden können, zu nutzen, die die asynchrone Natur von ajax und ermöglicht dennoch Ihr problem zu lösen, aber lassen Sie andere Verarbeitung, um im browser ohne browser zu blockieren. Dies erfordert asynchrone Programmiertechniken.Können Sie tun, so wie diese:
async: true
weil das ist, was dieser code geschrieben wird, und was ich immer gedacht.Den
setTimeout
- Funktion nimmt einenfunction
ausführen, nachdem das timeout. Übergeben Sie eine leere Funktion. So, nach 6 Sekunden das leere Funktion ausgeführt wird - und offensichtlich nichts zu tun.Ich denke, Sie erwarten
setTimeout
Verzögerung der Ausführung von anderen Skripten auf deiner Seite. Ist dies nicht der Fall, wiesetTimeout
Verzögerungen und führt die mitgelieferte callbackfunction
in einen neuen thread (nicht, dass andere Ausführung auf Ihrer Seite).Wenn Sie versuchen, etwas zu tun, nach 6 Sekunden, nur liefern den code, der in der
function() {}
code, den Sie haben. Eg:oder
Links:
setTimeout Dokumentation (mozilla)
Im Zusammenhang DAMIT Frage