2016-04-01 3 views
0

Ich habe eine lange laufende Funktion auf der Serverseite, und es wird über AJAX aufgerufen. Aber nachdem Benutzer die AJAX-Anfrage gesendet hatten, konnten sie auf andere Seiten wechseln. Ich möchte keinen AJAX-Spinner anzeigen, um Benutzer zu blockieren.Wie zeigen Sie das AJAX-Anrufergebnis an, wenn der Benutzer auf andere Seiten wechselte?

Wie kann ich die AJAX-Anrufergebnisse anzeigen, selbst wenn Benutzer auf andere Seiten wechseln? Sollte ich SignalR in Betracht ziehen?

Danke.

Update: Ich benutze ASP.Net MVC, jQuery, AngularJs, aber meine Anwendung ist keine einzelne Seite Anwendung.

+0

Wenn der Benutzer weitergegangen ist, können Sie ihn nicht auf das Ergebnis hinweisen. Sie sollten einen AJAX-Abbruch-Aufruf in das window.onbeforeunload-Ereignis aufnehmen. –

+1

vorausgesetzt, Sie verwenden angularJS (von dem Tag, die Sie enthalten) sollten Sie eine einzelne Seite Anwendung mit 'ngRoute' für die URLs, so dass Sie nicht auf" Verschieben auf andere Seiten " – Naigel

+0

Wenn Ihre Anrufe an den Back-End in einem Dienst und nicht in einem Controller verarbeitet werden, gibt es keinen Grund, warum Sie die Ergebnisse des Aufrufs nicht im Service speichern können, bis der Benutzer zu einer Ansicht zurückkehrt, die die Ergebnisse anzeigen kann. –

Antwort

0

Sie können das AJAX-Ergebnis nicht auf einer anderen Seite anzeigen, sobald Sie eine Seite verlassen, auf der Ihre JS-Prozesse beendet sind.

Eine Lösung wäre, die Ergebnisse an den Client zu übertragen (mit Web-Sockets oder ähnlichem), wenn die komplexe Funktion beendet wurde, oder die Seite mit AJAX neu zu laden, um eine tatsächliche Aktualisierung der Seite zu vermeiden.

+0

Die JS-Prozesse werden gestoppt. Wenn der AJAX-Aufruf jedoch bereits einen serverseitigen Prozess initiiert hat, wird dieser Vorgang fortgesetzt. Aus diesem Grund wäre es sinnvoll, im OnbeforeLoad-Ereignis des Fensters einen Abbruchanruf durchzuführen. –

+0

Das stimmt, aber was ich meinte, ist, dass der Code, mit dem der AJAX-Aufruf Erfolg hat, nicht ausgeführt wird, wenn Sie die Seite aktualisieren, auch wenn der Serverprozess beendet und etwas zurückgibt. Wenn er websockets verwendet, um das Abschlussereignis vom Server auf den Client zu übertragen, funktioniert es auch nach dem erneuten Laden. Ich bin nicht vertraut mit AJAX abord Anrufe, aber bedeutet das nicht, dass der Prozess auf dem Server nie beenden/vervollständigen wird? Vielleicht sollte der Prozess noch abgeschlossen werden und etwas zurückgeben, auch wenn der Benutzer auf eine andere Seite gewechselt ist. – Drown

+0

eigentlich OP fragt nach der Verwendung von 'SignalR', das ist * Web-Sockets oder so ähnlich * – teran

0

Wenn Sie nach Ergebnissen suchen, die gespeichert werden und an anderer Stelle zur späteren Verwendung abgerufen werden, würden Sie eine HTTP- oder Websocket-Anforderung starten, die eine Art von Task que startet, die Sie später mit AJAX oder Websockets überprüfen können Status/Ergebnis des Jobs/der Aufgabe

Was Sie zu tun versuchen, speichert Ergebnisse lokal, das ist nicht, wie diese Art von Sache funktioniert. Wenn Sie eine Ajax-Anfrage einleiten, bedeutet dies, dass Sie eine Art API verwenden, was bedeutet, dass der API-Endpunkt der Schlüsselhalter sein sollte und nicht der Browser des Nutzers.

Sie können eine Anfrage initiieren, die dann einem Nutzer folgt, egal wohin er geht, ähnlich wie Facebook funktioniert. Sie senden eine Nachricht, gehen auf eine ganz neue Seite und das Meldungsfeld wird weiterhin angezeigt, da es bereits das JavaScript lädt, das die Aufrufe an den Server initiiert, um die Informationen abzurufen. To-Do-Listen-Beispiele im Internet sind dafür bereits ein gutes Beispiel. Sie könnten eine Aufgabenliste auf jede Seite setzen, binden Sie sie in SignalR. Kein Speichern von Informationen im Browser, sondern Verlust von Ajax-Anfragen nach den Ergebnissen der ursprünglichen Anfrage. Oder im Falle von SignlR Websocket-Verbindungen, die serverseitige Objekte überwachen.

Verwandte Themen