medi: AJAX: Request Handling

Servus,

bin in der Materie AJAX noch neu - verstehe es auch und es umzusetzen macht mir auch keine Probs weiter.

Ich hätte da nur mal eine Frage bezüglich des Request Handlings. Da ich nicht Gefahr laufen möchte, dass sich meine Seite aufgrund von "versteckten/ungebrauchten" Requests aufhängt. (nutze das Prototype Framework, wenn es denn eine Rolle spielen sollte...) Mein Problem war das sich meine Seite bei Seitenwechseln/Refresh aufgehangen hat, wenn grad ein Request zugange war. Daher habe ich einen abort eingebaut, alá:

  
var GlobaleRequestVar;  
function make_request() {  
  GlobaleRequestVar.transport.abort();  
  GlobaleRequestVar = new Ajax.Request(...);  
}  

Ob das nun das Non plus Ultra ist, weiß ich nicht ;)
Gibts denn noch andere Sachen, die mir Probleme bereiten können bzw. auf die ich achten muss?

Gruß
medi

  1. var GlobaleRequestVar;
    function make_request() {
      GlobaleRequestVar.transport.abort();
      GlobaleRequestVar = new Ajax.Request(...);
    }

    
    >   
      
    Das kann nicht funktionieren, da JS Objekte nicht über eine Seitenwechsel erhalten bleiben. Aber natürlich musst du einen request abbrechen, wenn dieser noch nicht fertig ist und du das Objekt wiederverwendest. Da hier aber ein new verwendet wird, scheint es jedesmal ein neues Objekt zu sein und das alte wird verworfen. Was ich nicht für optimal halte, aber ich kenn prototype nicht gut genug um dir zu sagen ob und wie man es besser machen könnte. Was steht denn in der Doku?  
      
    Struppi.
    
    1. Hi,

      Das kann nicht funktionieren, da JS Objekte nicht über eine Seitenwechsel erhalten bleiben.

      Requests auch nicht. In welchem Szenario bereitet der gezeigte Code Deiner Ansicht nach Probleme?

      [...] ich kenn prototype nicht gut genug um dir zu sagen ob und wie man es besser machen könnte.

      Ich kenne es gut genug, um davon abzuraten. Es ist aufgebläht, viel zu komplizit (wenn auch nur bedingt kompliziert), schafft Abhängigkeiten zu sich selbst, macht das Verfassen separater Scripts teilweise unnötig schwierig, und schnell ist auch was anderes.

      Cheatah

      --
      X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. Hi,

        Das kann nicht funktionieren, da JS Objekte nicht über eine Seitenwechsel erhalten bleiben.

        Kapiert.

        Requests auch nicht.

        Verstehe ich nicht.  Ich lad ne Seite, von der aus ein Request rausgeht und wechsele dann die Seite. Dem Request, der dann bereits unterwgs zum Server ist, ist das doch egal, oder?

        Hotte

        1. Requests auch nicht.

          Verstehe ich nicht.  Ich lad ne Seite, von der aus ein Request rausgeht und wechsele dann die Seite. Dem Request, der dann bereits unterwgs zum Server ist, ist das doch egal, oder?

          aber nicht dem Request Objekt, das wird zerstört.

          Struppi.

        2. Hi,

          Requests auch nicht.
          Verstehe ich nicht.  Ich lad ne Seite, von der aus ein Request rausgeht und wechsele dann die Seite. Dem Request, der dann bereits unterwgs zum Server ist, ist das doch egal, oder?

          ja, eben. Ich halte das von Struppi Gesagte nicht für ein Problem: Wenn man die Seite wechselt, dann ist eh alles weg.

          Cheatah

          --
          X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
          X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
          X-Will-Answer-Email: No
          X-Please-Search-Archive-First: Absolutely Yes
          1. ja, eben. Ich halte das von Struppi Gesagte nicht für ein Problem: Wenn man die Seite wechselt, dann ist eh alles weg.

            auch Eben - aus dem Grund sollte der Code im Orginal ein Problem darstellen.

            Struppi.

            1. Hi,

              auch Eben - aus dem Grund sollte der Code im Orginal ein Problem darstellen.

              dann verrate mir bitte, was ich übersehen habe.

              Cheatah

              --
              X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
              X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
              X-Will-Answer-Email: No
              X-Please-Search-Archive-First: Absolutely Yes
              1. Hi,

                auch Eben - aus dem Grund sollte der Code im Orginal ein Problem darstellen.

                dann verrate mir bitte, was ich übersehen habe.

                var GlobaleRequestVar;  
                function make_request() {  
                  GlobaleRequestVar.transport.abort();  
                  GlobaleRequestVar = new Ajax.Request(...);  
                }  
                
                

                Er benutzt die Variabel, bevor sie einen Wert hat. Er kann die Methode aber erst benutzen, wenn das Objekt erzeugt wurde, dieses ist aber nach einem Reload weg.

                Struppi.

                1. Hi,

                  Er benutzt die Variabel, bevor sie einen Wert hat.

                  stimmt, das habe ich übersehen. Danke.

                  Er kann die Methode aber erst benutzen, wenn das Objekt erzeugt wurde, dieses ist aber nach einem Reload weg.

                  Den Reload erkenne ich aber immer noch nicht. Wo stammt der her?

                  Cheatah

                  --
                  X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                  X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                  X-Will-Answer-Email: No
                  X-Please-Search-Archive-First: Absolutely Yes
                  1. Den Reload erkenne ich aber immer noch nicht. Wo stammt der her?

                    Mein Problem war das sich meine Seite bei Seitenwechseln/Refresh aufgehangen hat, wenn grad ein Request zugange war. Daher habe ich einen abort eingebaut,

                    refresh versteh ich als Relaod, oder?

                    Struppi.

                    1. Hi,

                      refresh versteh ich als Relaod, oder?

                      ach, darauf hattest Du Dich bezogen. Ich war gedanklich komplett im programmatischen Teil. Jetzt verstehe ich Deinen Punkt.

                      Cheatah

                      --
                      X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                      X-Will-Answer-Email: No
                      X-Please-Search-Archive-First: Absolutely Yes
                    2. Mein Problem war das sich meine Seite bei Seitenwechseln/Refresh aufgehangen hat, wenn grad ein Request zugange war. Daher habe ich einen abort eingebaut,

                      refresh versteh ich als Relaod, oder?

                      Morgen :)

                      zum abort - ich war gestern etwas in Eile, daher die verkürzte Variante, deswegen auch "alá". Hier nen größerer Auszug:

                        
                      function abort_request(AJAXRequest) {  
                        if(AJAXRequest && !AJAXRequest._complete)  
                          AJAXRequest.transport.abort();  
                      }  
                        
                      var GlobaleRequestVar;  
                      function make_request() {  
                        abort_request(GlobaleRequestVar);  
                        GlobaleRequestVar = new Ajax.Request(...);  
                      }  
                      
                      

                      Zum new - anders gehts nicht, aber da das erzeugte Objekt, in eine globale Variable geschrieben wird, gibts immer nur ein Requestobjekt zur selben Zeit, also tümmeln sich auch keine verlorengegangen Requests rum. (oder irre ich da etwa?)

                      Mein Problem ist, dass wenn der Request gerade läuft/lädt, und ich einen Seitenwechsel machen möchte, bzw aus Spaß mal F5 drücke, der Request in einen Deadlock gerät und das das Ende bedeutet. Hab mir schon überlegt einen Timeout einzubauen, um das abzufangen. Allerdings habe ich dazu noch nichts in Prototype gefunden.

                      Daher meine Anfrage, da sich hier sicherlich schon einige damit zu tun hatten.