Prototype: Ajax.Request Rückgabe

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Prototype: Ajax.Request Rückgabe

    Hallo,

    JavaScript ist alles andere als mein Steckenpferd. Deswegen greife ich auch immer auf entsprechende Bibliotheken und Frameworks zurück. Nun habe ich ein Problem und weiß beim besten willen nicht, wie ich es lösen soll.

    Situation:

    Ich habe eine Funktion, die via Ajax.Request etwas auf dem Server prüft und true oder false zurückgeben soll. Beispiel:

    PHP-Code:
    function checkSomething() {
        var 
    url 'http://example.com';
        new 
    Ajax.Request(url, {
            
    onSuccess: function(response) {
                return 
    true;
            }
        });

    Mein Problem: Wie bekomme ich innerhalb der Funktion "checkSomething" an die Rückgabe der anonymen onSuccess-Funktion?

    Danke schonmal
    [FONT="Helvetica"]twitter.com/unset[/FONT]

    Shitstorm Podcast – Wöchentliches Auskotzen

  • #2
    PHP-Code:

    function checkSomething() {
        var 
    url 'http://example.com';
        new 
    Ajax.Request(url, {
            
    onSuccessmyResponseFunction
        
    });
    }

    function 
    myResponseFunction(ajaxResult){
     
    //do something

    Download ET-Chat v3.x.x

    Kommentar


    • #3
      Code:
      function checkSomething() {
          var url = 'http://example.com';
          new Ajax.Request(url, {
              onSuccess: function(transport) {
                  alert(tranport.responseText);
              }
          });
      }
      Steht aber auch alles in der Doku:

      http://www.prototypejs.org/api/ajax/request
      http://www.prototypejs.org/api/ajax/response

      Kommentar


      • #4
        Ich habe mich wohl missverständlich ausgedrückt: Die Funktion "checkSomething" soll einen Booleschen Wert zurückgeben. Ob ich nun eine Callback-Funktion angebe oder einen Lamda-Funktion einbaue ist in dem Moment irrelevant - die umliegende Funktion soll die Rückgabe machen ...

        @h3ll: Wie ich an die Daten komme, ist mir klar. Das Ergebnis der Auswertung soll halt von der "checkSomething"-Funktion zurückgegeben werden.

        Edit: Etwas konkreter, die Schöpfungshöhe für das bisschen Code ist ohnehin sehr niedrig ;-)

        PHP-Code:
        function viewNameExists(viewnamefacename) {
            
            var 
        = new Ajax.Request(
                
        opener.getBaseUrl() + 'templates/editor/getViewsAjax/' facename,
                {
                    
        onSuccess: function(r) {
                        var 
        items = eval(r.responseText);
                        for(var 
        0items.lengthi++) {
                            if(
        items[i].name == viewname) {
                                return 
        true;
                            }
                        }
                        
                        return 
        false;
                    }
                }
            );
            

        Zuletzt geändert von unset; 05.05.2009, 16:23.
        [FONT="Helvetica"]twitter.com/unset[/FONT]

        Shitstorm Podcast – Wöchentliches Auskotzen

        Kommentar


        • #5
          Das geht nicht. AJAX ist asynchron.

          Asynchronous JavaScript And XML

          Was du wohl machen willst ist ein synchroner HTTP Request. Nur hat das nix mit AJAX zu tun.

          Kommentar


          • #6
            Es wird ja wohl irgendeine Möglichkeit geben, die weitere Ausführung des JavaScripts so lange zu pausieren, bis eine Antwort gekommen ist ...

            Note to self: Demnächst lesen wir die Doku komplett: Es gibt ein asynchronous Flag :-)
            [FONT="Helvetica"]twitter.com/unset[/FONT]

            Shitstorm Podcast – Wöchentliches Auskotzen

            Kommentar


            • #7
              Original geschrieben von unset
              Es wird ja wohl irgendeine Möglichkeit geben, die weitere Ausführung des JavaScripts so lange zu pausieren, bis eine Antwort gekommen ist ...

              Note to self: Demnächst lesen wir die Doku komplett: Es gibt ein asynchronous Flag :-)
              ja, den dritten parameter bei open. allerdings ist der browser dann auch komplett blockiert, bis der request durch ist

              peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar


              • #8
                Das macht nichts, wird eh nur intern verwendet.
                [FONT="Helvetica"]twitter.com/unset[/FONT]

                Shitstorm Podcast – Wöchentliches Auskotzen

                Kommentar


                • #9
                  Original geschrieben von unset
                  Das macht nichts, wird eh nur intern verwendet.
                  Dann wirst du auch nur interne Beschwerden bekommen. Im Ernst, diese Totalblockade ist absolut nervig. Das macht keiner gerne mit.

                  alternativ könntest du z.b. formularelemente auf disabled setzen, bis der request durch ist.

                  peter
                  Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                  Meine Seite

                  Kommentar


                  • #10
                    OffTopic:
                    Keine tolle Lösung das Skript warten zu lassen, aber du bist nicht der einzige, der in diese asynchrone Denkfalle tappt. Durch unserem netten sequentiellen PHP so ohne Threads sind wir alle nicht die besten Paralleldenker.

                    Kommentar


                    • #11
                      Bis jetzt habe ich von der Totalblockade nicht einmal was bemerkt. Insofern …

                      Edit: Nach ein paar Sekunden längeren Überlegens stelle ich fest, dass es ein Designfehler der Anwendung ist, dass es überhaupt erst soweit kommen konnte. Dann weiß ich ja, was ich morgen machen kann. ;-)
                      [FONT="Helvetica"]twitter.com/unset[/FONT]

                      Shitstorm Podcast – Wöchentliches Auskotzen

                      Kommentar


                      • #12
                        Original geschrieben von unset
                        Bis jetzt habe ich von der Totalblockade nicht einmal was bemerkt.
                        bau mal ein fettes sleep in die php-datei ein, dann merkst du es.

                        peter
                        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                        Meine Seite

                        Kommentar


                        • #13
                          mir ist schon klar, wie es zu stande kommen würde, aber ich sagte ja bereits: es handelt sich um eine interne anwendung. ich kann mich auf die systeme verlassen. und wenn sie ausgefallen oder ausgebremst sind, dann habe ich in dem moment eine ganze menge anderer sachen zu erledigen ;-)
                          [FONT="Helvetica"]twitter.com/unset[/FONT]

                          Shitstorm Podcast – Wöchentliches Auskotzen

                          Kommentar


                          • #14
                            OffTopic:
                            ach, mach doch, was du willst

                            peter
                            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                            Meine Seite

                            Kommentar


                            • #15
                              Ich hab ja gesagt, dass ich das Morgen mal umstellen werde, denn die Situation wird sicherlich auch bei aufwändigeren Hintergrundprozessen auftreten, wo ich nicht mehr davon ausgehen kann, dass alles für den Benutzer so schnell wie lokal abläuft ;-)

                              Und was ich will mach ich sowieso :-P
                              [FONT="Helvetica"]twitter.com/unset[/FONT]

                              Shitstorm Podcast – Wöchentliches Auskotzen

                              Kommentar

                              Lädt...
                              X