Einrichtung:
Ich habe eine Datentabelle, deren jede Zeile anklickbar ist. Wenn auf eine Zeile geklickt wird, wird ein Ajax-Aufruf durchgeführt, der einige Daten zurückgibt. Manchmal benötigt der Ajax-Aufruf etwas Zeit, abhängig von der Menge der zurückgesendeten Daten. Es funktioniert alles gut.
Problem:
Das Problem tritt auf, wenn die Zeilen nacheinander schnell angeklickt werden. Kurz gesagt, bevor der vorherige Ajax-Aufruf zurückkehrt, wenn die Zeile angeklickt wird (d. H. Ein neuer Ajax-Aufruf wird gemacht), erhalte ich einen Fehler.
%Vor%(Der Ajax-Aufruf gibt eine JSONP-Daten zurück)
Es sieht so aus, als würden sich die Ajax-Anrufe irgendwie vermischen (?), aber ich bin mir nicht sicher. Kann mir bitte jemand sagen, warum passiert das?
Bitte lassen Sie mich wissen, wenn weitere Informationen erforderlich sind, um das Problem zu klären.
Danke
EDIT 1:
Hier ist ein Ajax-Code:
%Vor%EDIT 2:
Hier ist die Klasse, die callback
ihren Namen zuweist. Wenn der Standardrückrufwert null ist, weist er einen Standardwert "Rückruf" zu. Sieht aber so aus, als ob der Standard-Callback immer Null ist und daher immer "Callback" zuweist.
Und die obige Klasse wird wie folgt in mvc-servlet.xml
referenziert:
Das Problem besteht darin, wie jQuery mit dem Rückruf mit JSONP arbeitet. Hier ist die Idee:
Nun funktioniert alles einwandfrei, wenn Sie nicht die benutzerdefinierte jsonpCallback
definieren (jQuery weist standardmäßig jeder JSONP-Anfrage einen eindeutigen Rückruf zu). Was passiert nun, wenn Sie das tun und gleichzeitig zwei JSONP-Anfragen auslösen?
callback
ist festgelegt. callback
wird von JSONP2; callback
wird für JSONP1 ausgelöst; callback
; callback
auszulösen, aber das ist bereits gelöscht; Einfache Lösung besteht nicht darin, jsonpCallback
Option zu überschreiben.
Wie Alex Ball vorgeschlagen hat, müssen Sie Ihre AJAX-Anfragen in die Warteschlange stellen, so dass sie nacheinander ausgeführt werden. Es ist sehr einfach, wie hier hier in einem Beitrag in stackoverflow (ja, es funktioniert auch für JSON-P).
> Die zweite Sache ist die Fehlermeldung Property 'callback' of object [object Window] is not a function
, nur weil Sie keine globale Funktion namens callback
haben. Definieren Sie es einfach wie folgt:
Hoffe, das hilft.