Das ist mein Ajax:
%Vor%Wenn ich langsam tippe (langsamer als ein Buchstabe pro Sekunde), bekomme ich die Ergebnisse korrekt, wenn ich schneller tippe, bekomme ich zweimal die gleichen Ergebnisse
Beispiel:
langsame Eingabe: res1 res2 res3
schnelle Eingabe: res1 res2 res3 res1 res2 res3
Außerdem wäre jeder Hinweis zur Verbesserung des Codes willkommen!
Das ist was passiert (Pseudocode):
Wenn Sie langsam tippen:
%Vor%Wenn Sie schnell tippen:
%Vor% Um das Duplikatproblem zu lösen möchten Sie, dass Ihre Ergebnisse eine atomare Operation entfernen / anhängen - mit .replaceWith
.
Erstellen Sie die Ergebnisse zuerst als String und dann als .replaceWith
anstelle von .remove
/ .append
:
Ein anderes Problem (das nicht mit Duplikaten zusammenhängt) kann sein, dass ältere Ergebnisse neuere Werte überschreiben, die früher eingetroffen sind (), weil AJAX asynchron ist und der Server möglicherweise Antworten in derselben Reihenfolge gibt, in der Anfragen eingehen).
Ein Ansatz, um dies zu vermeiden, ist die Anfügung eines Roundtrip-Markers (Art der "Seriennummer") an jede Anfrage und deren Überprüfung als Antwort:
%Vor%Auf der Serverseite:
%Vor% Ein anderer Ansatz wäre es, .ajax()
-Anfragen synchron zu machen und async
auf false
zu setzen. Dies kann jedoch vorübergehend den Browser sperren, während die Anfrage aktiv ist (siehe Dokumente )
Außerdem sollten Sie auf jeden Fall eine Zeitüberschreitung einführen, wie algiecas vorschlägt, um die Serverlast zu reduzieren ( drittes Problem, nicht verwandt mit Duplikaten oder Anfrage / Antwort-Reihenfolge ).