none
AJAX Updates während eine Prozedur läuft...? RRS feed

  • Frage

  • Hallo,

    ich habe eine Seite erstellt mit einem Button und einer TextArea (mehrzeilige TextBox), beides befindet sich innerhalb eines UpdatePanel. Klickt der User jetz auf den Button, werden im Hintergrund zuvor hochgeladene dateien verarbeitet. Da dort archive erstellt und entpackt werden kann es schonmal ne weile dauern bis es fertig ist.

    In der Textarea möchte ich  eine Log Datei welche erstellt wird "live" während der Verarbeitung anzeigen. Der Button Eventhandler hat ein "button.enabled = false" am Anfang, dann startet die Prozedur welche mittels "textarea += logzeile"  immer etwas hinzufügt. Leider wird der Button erst disabled bzw. die Textbox geupdated wenn der komplette eventhander des button klicks durchgelaufen ist. Also erscheint erst zum Schluss der gesamte Text sowie der Button wird erst nach der Verarbeitung disabled,  was schlecht ist da der user so mehrmals darauf klicken kann...

    Ich habe lange im Netz gesucht aber nichts gefunden was mein Problem löst. Kann hier jemand helfen ?

    Danke im Voraus.

    René Bretz

    Sonntag, 16. Oktober 2011 02:10

Antworten

  • Hallo Rene,

    das, was Du vorhast, ist so erstmal nicht möglich. Der serverseitige Handler arbeitet synchron, daher wird erst nach Fertigstellung der Verarbeitung etwas an den Client zurückgesendet.

    Du solltest die beiden Aktionen trennen. Also einmal die Verarbeitung und einmal die Anzeige. Dazu kannst Du dir bspw. zwei Webservice Methoden schreiben. Eine stößt die Verarbeitung an und setzt bspw. je nach Fortschritt eine Sessionvariable (alternativ kannst Du das auch in eine Datenbank, ... schreiben). Die andere Methode liest nur diesen Wert aus und liefert diesen an den Client zurück. Beides kannst Du über jQuery.ajax() aufrufen, die Methode für die Fortschrittsanzeige wird in dem Fall einfach periodisch alle x Sekunden ausgeführt, bis die Rückgabe ergibt, dass die Verarbeitung der Dateien fertig ist.

    Hier findest Du ein Beispiel für einen Aufruf einer ASP.NET Webservice Methode aus jQuery heraus.

      http://www.aspnetzone.de/blogs/robertobez/archive/2009/11/02/asp-net-Ajax-UpdatePanel-Callback-jQuery-Webservice.aspx

    Das UpdatePanel kannst Du in dem Fall weglassen.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Sonntag, 16. Oktober 2011 11:06
    Moderator

Alle Antworten

  • Hallo Rene,

    das, was Du vorhast, ist so erstmal nicht möglich. Der serverseitige Handler arbeitet synchron, daher wird erst nach Fertigstellung der Verarbeitung etwas an den Client zurückgesendet.

    Du solltest die beiden Aktionen trennen. Also einmal die Verarbeitung und einmal die Anzeige. Dazu kannst Du dir bspw. zwei Webservice Methoden schreiben. Eine stößt die Verarbeitung an und setzt bspw. je nach Fortschritt eine Sessionvariable (alternativ kannst Du das auch in eine Datenbank, ... schreiben). Die andere Methode liest nur diesen Wert aus und liefert diesen an den Client zurück. Beides kannst Du über jQuery.ajax() aufrufen, die Methode für die Fortschrittsanzeige wird in dem Fall einfach periodisch alle x Sekunden ausgeführt, bis die Rückgabe ergibt, dass die Verarbeitung der Dateien fertig ist.

    Hier findest Du ein Beispiel für einen Aufruf einer ASP.NET Webservice Methode aus jQuery heraus.

      http://www.aspnetzone.de/blogs/robertobez/archive/2009/11/02/asp-net-Ajax-UpdatePanel-Callback-jQuery-Webservice.aspx

    Das UpdatePanel kannst Du in dem Fall weglassen.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Sonntag, 16. Oktober 2011 11:06
    Moderator
  • Hallo ReneFFM,

    Hat Dir die Antwort geholfen?

    Grüße,
    Robert

    Donnerstag, 20. Oktober 2011 09:11
    Moderator
  • Hallo ReneFFM,

    Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Freitag, 21. Oktober 2011 14:23
    Moderator