eigentlich ist die Frage so einfach wie das Thema sagt. Gibt es eine Möglichkeit, verschiedenen Ajax-Handlern eine höhere / niedrigere Priorität zu geben (was bedeutet, dass sie früher feuern)?
Was meine ich? Nun, ich muss mich mit einer ziemlich großen Web-App beschäftigen. Tonnen von Ajax-Anfragen werden in verschiedenen Modulen ausgelöst. Jetzt ist es mein Ziel, einen einfachen Session-Timeout-Mechanismus zu implementieren. Jede Anfrage sendet die aktuelle Sitzungs-ID als Parameter. Wenn die Sitzungs-ID nicht mehr gültig ist, gibt mein Backend-Skript die Anfrage mit einem benutzerdefinierten Antwort-Headersatz zurück (value ist ein uri).
Ich gehe also grundsätzlich so
%Vor%Das funktioniert natürlich wie ein Zauber, aber mein Problem ist, dass dieses globale Ajax-Ereignis tatsächlich erst zu 100% ausgelöst werden muss, was nicht der Fall ist. Einige dieser ursprünglichen Ajax-Request-Handler werden aufgrund fehlender oder unerwarteter Daten einen Fehler ausgeben, in diesem Fall wird der globale Handler niemals ausgeführt.
Nun wäre ich ein bisschen glücklich, wenn ich nicht jeden einzelnen Request-Handler durchlaufen müsste und es für ungültige Session-Datenantworten ausfallsicher machen müsste. Ich würde viel lieber den Job an einem bestimmten Ort machen. Aber wie kann ich sicherstellen, dass mein globaler Handler zuerst ausgeführt wird?
Wenn ich Sie richtig verstehe, möchten Sie Ihren jsons-Anfragen überall Ihren eigenen Rückruf hinzufügen. Sie könnten den AjaxPrefilter-Haken verwenden.
%Vor%Sie können dort auch die Optionen ändern, um den Anfrageparametern die Session-ID hinzuzufügen.
jQuery können Sie Methoden wie .post / .ajax "patchen".
Sie können möglicherweise die entsprechende (n) Methode (n) patchen, so dass Ihr spezielles AJAX-Ereignis immer vor demjenigen ausgelöst wird, den Ihr Code aufrufen möchte.
Dies ist ein "Pseudo-jQuery-Code", der Ihnen den Einstieg erleichtern soll. Ich bezweifle, dass es so funktioniert, wie es ist, aber es zeigt das Grundkonzept und es sollte dir helfen.
%Vor%Das obige basiert auf einem anderen, nicht verwandten Code, den ich habe getestet habe, wodurch $ .each () für undefinierte / null-Arrays funktioniert):
%Vor%Beachten Sie, dass viele exposed-Funktionen auch intern von jQuery aufgerufen werden, also seien Sie sehr vorsichtig mit diesem Trick; Sie könnten einen anderen Teil von jQuery oder andere Probleme verursachen. Im Fall der AJAX-Funktionen sollten Sie wahrscheinlich nur die innerste Funktion patchen, um eine unendliche Rekursion zu verhindern. (FWIW, ich habe bis jetzt noch keine Nebenwirkungen für den $ .each () - Patch gefunden.)
Ich bin mir nicht sicher, ob das überhaupt das ist, was du meintest, aber ich dachte mir, ich könnte es sowieso irgendwie brauchen.
Es patcht jQuerys Ajax-Funktion, um ein Objekt mit der Eigenschaft priority
zu akzeptieren. Wenn keine Priorität festgelegt ist, wird die Priorität 1 (höchste Priorität 0). Wenn es eine Priorität gibt, tut es eines von zwei Dingen. Wenn die Priorität etwa 5 ist, prüft sie, ob der Ajax-Anruf mit der vorherigen Priorität (in diesem Fall 4) aufgerufen wurde. Wenn nicht, fügt es es einem Array von Ajax-Anrufen mit dieser Priorität hinzu (in diesem Fall 5). Wenn die vorherige Priorität aufgerufen wurde, ruft sie die Anforderung normal auf. Wenn eine Anforderung mit einer Priorität aufgerufen wird, ruft sie alle ausgehenden Anforderungen mit der nächst höheren Priorität auf.
Mit anderen Worten, wenn es keine Priorität gibt, wartet es auf Priorität 0, wenn es eine Priorität gibt, wartet es darauf, dass die darunter liegende Priorität aufgerufen wird. Wenn Sie möchten, dass Anrufe ohne Priorität sofort gesendet werden, kommentieren Sie die Zeile mit dem Kommentar aus, den ich mit default action?
Patches für get
und post
. Sie müssen diese zusätzlichen Argumente hinzufügen oder diese selbst ändern, damit die Priorität mit post
und get
Anfragen funktioniert. Das ist direkt aus jQuery 1.7, außer dem extra Argument und den zwei Zeilen, denen ich Kommentare hinzugefügt habe.
Ich habe hier ein Beispiel eingerichtet: Ссылка
Ich habe tatsächlich einige Ajax-Anfragen erstellt, die auf Google ausgerichtet sind. Sie können also in Chrome das Netzwerk-Fenster aufrufen, um die Anfragen zu sehen.
Ich habe vor kurzem etwas implementiert, das der Funktionalität sehr ähnlich ist, die Sie suchen.
Ich habe einen Filter auf der Serverseite eingerichtet, um nach einer gültigen Sitzung zu suchen, und, falls nicht, gebe einen 401-Fehler mit benutzerdefiniertem Statustext für ein spezifischeres Fehlerdetail zurück.
Die Ajax-Aufrufe, die ich an diese Seiten gemacht habe, wurden in der normalen Konvention mit dem Attribut 'success' geschrieben.
Für Situationen, in denen ein Fehler aufgetreten ist, habe ich der Fehlerfunktion einen globalen Callback hinzugefügt, der auf den spezifischen Fehler prüft und entsprechend umleitet. wie:
%Vor%Tags und Links javascript jquery ajax