Ich habe eine lange laufende Aufgabe, die mit jquery ajax aufgerufen wird. Ich verwende das Block ui-Plugin, um das Laden anzuzeigen. Ist da sowieso ich kann Fortschrittsnachrichten zurück zum Klienten senden, um Fortschritt anzuzeigen und dieses auf der Block ui plugin Nachricht aktualisiert zu haben.
So wird es zeigen (wie der Server seine Arbeit macht). .
"Erste Quelle wird geladen..."
"Zweite Quelle wird geladen..."
"Laden der dritten Quelle..."
"Analyseergebnisse..."
Nach dem, was ich beim Hochladen von Sachen gesehen habe - Leute erstellen ein separates Gateway und fragen es nach Fortschrittsinformationen ab, da es nur auf der Serverseite verfügbar ist. Aber ich denke, es ist nicht das Beste in Ihrem Fall.
Wenn Sie Dinge mit Fortschrittsinformationen laden möchten oder zulassen möchten, dass der Server beim Generieren der Ausgabe Informationen über den Fortschritt erhält, dann ist . Es ist schön hier abgedeckt. Im Grunde ist es eine einzelne HTTP-Anfrage, auf die der Server für eine Minute oder so (in Sekundenbruchteilen) antwortet, und dann wird eine neue Verbindung geöffnet.
Das war eine Entdeckung für mich;)
[Bearbeiten]
Gegenwärtig gibt es viele bessere Techniken, und alle sind in Socket.IO - Websockets mit Fallbacks zu anderen Techniken einschließlich
Socket.IO ist ein Modul für nodeJS, aber es gibt andere und ähnliche Implementierungen. Ich habe bereits einige Pakete mit JAVA Socket.IO-Implementierung von Ссылка
ausgetauschtEine Möglichkeit ist die Verwendung von HTTP-Handlern und AJAX mit jQuery.
1. Server-seitige Anfrage einleiten
%Vor%2. Polling
Als nächstes müssen Sie den Server im Intervall "t" abfragen und den Status abrufen. Dazu müssen wir eine Funktion im 't'-Intervall aufrufen, die einen AJAX-Aufruf an einen HTTPHandler initiiert, um den Status zu erhalten.
%Vor% In diesem Fall kann der GetStatusHandler.ashx den vollständigen innerenHtml-Status zurückgeben.
Für zB beim ersten Aufruf wird 'Loading First source ...' zurückgegeben, dann könnte es zurückkehren:
Loding Erste Quelle ...
Zweite Quelle wird geladen ...
und so weiter.
Ich wurde erst kürzlich auf ein Projekt aufmerksam, das Ajax "Push" macht. Vielleicht möchten Sie es überprüfen:
Soweit ich weiß, gibt es noch ein paar andere Projekte, die ähnliche Dinge tun. Das ist das Wahrhaftigste: "Versende Fortschrittsnachrichten zurück zum Client", wo die andere Lösung eine Anfrage nach Fortschritt verlangt (immer noch eine sehr legitime und gute Lösung).
Ich möchte, dass jede AJAX-Anfrage eine JSON-Antwort zurückgibt, die eine Nachricht, die Daten und die nächste anzufordernde URL enthält: {message: "Loading second resource...", data: ..., next_url: "/next_part"}
Legen Sie vor der ersten AJAX-Anfrage die BlockUI-Nachricht auf "Laden ..." fest. Wenn Sie die Antwort erhalten, legen Sie die Nachricht BlockUI auf die Nachricht fest, die Sie von Ihrem AJAX-Anruf erhalten haben. Machen Sie dann den nächsten AJAX-Aufruf mit dem Wert "next_url" usw., bis Sie alle Aufgaben abgeschlossen haben.
Wenn Sie einen großen Datensatz laden, aber in Teilen, möchten Sie vielleicht so etwas wie ein progressives Laden-Entwurfsmuster
Was Sie versuchen, ist etwas, das Comet ähnlich ist. Herkömmliche ("nicht-comet") Webserver sind nicht für diese Art von Transaktionsmodellen ausgelegt und daher keine erwünschte Lösung.
Mein Vorschlag ist, die Verarbeitung in einer Clientanforderung pro Datenquelle aufzulösen:
%Vor% Dies ist ein Beispiel für eine asynchrone Lösung. Sie können die Statusbehandlung in callback()
implementieren, wenn sie synchron sein muss.
Nun, ich hatte eine ähnliche Situation und löse sie mit einem anderen Ansatz. Es ist SEHR HÄSSLICH, herumzuarbeiten, ich weiß das, also fang bitte nicht an zu sagen, wie schlimm es ist, denn ich weiß es, aber es war ok für das, wofür ich es brauche.
Ich bringe den Fortschritt in eine Datei auf der Serverseite. Zum Beispiel habe ich die process.php aufgerufen, die viel Arbeit machen muss und es dauert eine Weile, bis sie abgeschlossen ist, so dass der Benutzer nervös wird und er den Browser schließt (nicht zu gut). So speichert process.php einige Ausgaben in einer Datei auf dem Server. Auf der Seite, die die process.php genannt hat, habe ich ein kleines div, span oder was auch immer, wo ich den Fortschritt anzeigen möchte, aber ich schlage div vor. Jede X Millisekunde, oder Sekunden, lade ich ein anderes Skript vom Server im Div, sagen wir Display_info.php Jetzt liest display_info.php die Datei, die von process.php ausgegeben wurde und der Inhalt wird im div angezeigt.
Sie müssen darauf achten, dass die Ausgabe von process.php für jede Gelegenheit eindeutig sein muss, sonst werden Sie die Infoausgabe an die Browser stören.
Emil
Tags und Links asp.net-mvc jquery progress blockui