bleicher: AJAX-minimum

Grüße,
ich werde mich irgendwann mit ajax gründlich beschäftigen ;) bis es aber soweit ist - such ich kein ajax-tutorial (davon gibts ja eine menge), sondern eine "maximalmöglich valide" vorgefertigte-ajax-funktion die einfach nur eine URL als parameter bekommt und den rückgabestring returnt; (ich fand ein haufen an frameworks - die sind aber alle "zu gut" - sprich zu massiv) kann jemand eine minimallösung empfehlen?

gleich nebenfrage - gelten sessionen für ajax-anfragen? also kann ich auf sessionswerte zugreifen, wenn der php script per ajax aufgerufen wurde?

MFG
bleicher

  1. Hallo bleicher,

    vorgefertigte-ajax-funktion die einfach nur eine URL als parameter bekommt und den rückgabestring returnt;

    Ist vielleicht nicht genau das, was Du suchst, aber die Funktion bekommt eine ID und holt dann Daten vom Server: http://mylittlehomepage.net/ajax-tutorial-datenabfrage

    gleich nebenfrage - gelten sessionen für ajax-anfragen? also kann ich auf sessionswerte zugreifen, wenn der php script per ajax aufgerufen wurde?

    "AJAX-Anfragen" sind ganz normale GET- oder POST-Anfragen. Dem PHP-Skript ist das ziemlich egal, ob man das nun AJAX nennt oder nicht.

    Alex

    1. Grüße,

      Ist vielleicht nicht genau das, was Du suchst, aber die Funktion bekommt eine ID und holt dann Daten vom Server: http://mylittlehomepage.net/ajax-tutorial-datenabfrage

      sieht gut aus^^ hoffentlich ist die function nicht copyrighted :P

      "AJAX-Anfragen" sind ganz normale GET- oder POST-Anfragen. Dem PHP-Skript ist das ziemlich egal, ob man das nun AJAX nennt oder nicht.

      ok, danke ,)

      MFG
      bleicher

  2. Eigentlich hat das mit AJAX nicht mehr viel zu tun, aber hier eine einfache Funktion für Dich:

    function httpget(url) {  
       // XMLHttpRequest initialisieren:  
       var req = false;  
       try { req = new XMLHttpRequest(); }  
       catch(e) { try { req = new ActiveXObject('Msxml2.XMLHTTP'); }  
       catch(e) { try { req = new ActiveXObject('Microsoft.XMLHTTP'); }  
       catch(e) { return false; } } }  
       // Aufruf machen  
       req.open('GET', url);  
       req.send();  
       // Antwort ungeprüft zurückgeben  
       return req.responseText;  
    }
    

    Der Status wird hierbei nicht überprüft, es sollte also keine 404er-Antwort zurückkommen.

    Gruß, LX

    --
    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: Unusual
    X-Please-Search-Archive-First: Absolutely Yes
    1. Grüße,

      function httpget(url) {

      // XMLHttpRequest initialisieren:
         var req = false;
         try { req = new XMLHttpRequest(); }
         catch(e) { try { req = new ActiveXObject('Msxml2.XMLHTTP'); }
         catch(e) { try { req = new ActiveXObject('Microsoft.XMLHTTP'); }
         catch(e) { return false; } } }
         // Aufruf machen
         req.open('GET', url);
         req.send();
         // Antwort ungeprüft zurückgeben
         return req.responseText;
      }

        
      danke !  
      das ist so ziemlich das richtige - kann man das auch mit POST machen, oder sonstwie werte aus 3 formularfeldern mit über 1024 zeichen länge übergeben ;)?  
        
      MFG  
      bleicher
      
      -- 
      \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_-  
        
      [Die Essenz der Egomanie](http://bleicher.isgreat.org/)  
      [ie:{ fl:( br:< va:| ls:\[ fo:# rl:? n4:? ss:| de:> js:| ch:| sh:( mo:| zu:|](http://www.peter.in-berlin.de/projekte/selfcode/?code=ie%3A%7B+fl%3A%28+br%3A%3C+va%3A%7C+ls%3A%5B+fo%3A%23+rl%3A%3F+n4%3A%3F+ss%3A%7C+de%3A%3E+js%3A%7C+ch%3A%7C+sh%3A%28+mo%3A%7C+zu%3A%7C)
      
      1. das ist so ziemlich das richtige -

        Nur wird das nicht funktionieren.

        Struppi.

        1. Grüße,

          Nur wird das nicht funktionieren.

          ok, und was WIRD funktionieren?

          MFG
          bleicher

          1. Grüße,

            Nur wird das nicht funktionieren.

            ok, und was WIRD funktionieren?

            Du musst eine callback Funktion übergeben die nach dem Erfolgreichen Request aufgerufen wird. Das sollte eigentlich in den Dokus die du gefunden hast beschrieben werden.

            Struppi.

            1. Grüße,

              Du musst eine callback Funktion übergeben die nach dem Erfolgreichen Request aufgerufen wird. Das sollte eigentlich in den Dokus die du gefunden hast beschrieben werden.

              soweit war ich ja - eine einfache GET function die einen div mit daten füllt ging, aber formularabsenden war dann nicht mehr mit drin.

              das habe ich versucht (80% copy&paste ;/)

                
              var ajaxdestination="";  
                
              function getdata(what,where) { // get data from source (what)  
               try {  
                 xmlhttp = window.XMLHttpRequest?new XMLHttpRequest():  
                  new ActiveXObject("Microsoft.XMLHTTP");  
               }  
               catch (e) { /* do nothing */ }  
                
               document.getElementById(where).innerHTML ="LOADING";  
              // we are defining the destination DIV id, must be stored in global variable (ajaxdestination)  
               ajaxdestination=where;  
               xmlhttp.onreadystatechange = triggered; // when request finished, call the function to put result to destination DIV  
                
               switch(what) {  
                
               case "edit":  
               var to="blogajax.php?"+what+"="+where;  
                xmlhttp.open("GET", to);  
                xmlhttp.send(null);  
               break;  
                
              case "save":  
               //var to="save=1&titel="+document.getElementById("titel"+where).value+"&text="+document.getElementById("text"+where).value+"&keywords="+document.getElementById("keywords"+where).value;  
              var to=document.getElementById("titel"+where).value;  
              to+="&save=1";  
               alert(to);  
               xmlhttp.open('POST',  'blogajax.php');  
                  xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');  
                  xmlhttp.onreadystatechange = triggered();  
               xmlhttp.send(to);  
              break;  
               }  
                
                return false;  
              }  
                
              function triggered() { // put data returned by requested URL to selected DIV  
                if (xmlhttp.readyState == 4) if (xmlhttp.status == 200)  
                  document.getElementById(ajaxdestination).innerHTML =xmlhttp.responseText;  
              }  
              
              

              nur geht der case "save": mit formularabsenden nicht;/

              MFG
              bleicher

              1. das habe ich versucht (80% copy&paste ;/)

                xmlhttp.onreadystatechange = triggered; // when request finished, call the function to put result to destination DIV

                ...

                xmlhttp.onreadystatechange = triggered();

                Fällt dir was auf?

                Struppi.

                1. Grüße,

                  xmlhttp.onreadystatechange = triggered();

                  Fällt dir was auf?

                  TBH - nein. ich weiss nur dass der GET teil das bewirkt was ich brauche. POST-weiche nicht.
                  was ist denn falsch ?
                  MFG
                  bleicher

                  1. xmlhttp.onreadystatechange = triggered();

                    Fällt dir was auf?

                    TBH - nein.

                    Schau dir mal an, wie du die Funktion beim erstenmal verwendest .

                    Struppi.

                  2. Grüße,| Grüße,

                    xmlhttp.onreadystatechange = triggered();

                    ok - > triggered; ohne ().
                    step3 dann -

                    wie müssen die verdammten variablen für POST verpackt sein?
                    und warum scheitn es unmöglich zu sein ein nachträglich per innerHTML erzeugtes Element  per getElementById anzusprechen?
                    MFG
                    bleicher

                    1. Hi,

                      wie müssen die verdammten variablen für POST verpackt sein?

                      Hast du dazu schonmal Google gefragt?
                      Ich hab das gerade gemacht und bin auf folgende Seite gekommen: http://www.openjs.com/articles/ajax_xmlhttp_using_post.php.
                      Dort ist sogar farbig hervorgehoben, was bei GET und POST zu unterscheiden ist.

                      und warum scheitn es unmöglich zu sein ein nachträglich per innerHTML erzeugtes Element  per getElementById anzusprechen?

                      Dazu solltest du vielleicht noch mehr Angaben machen.
                      Welcher Browser? Wie hast du es versucht?

                      mfG,
                      steckl

                      1. Grüße,

                        Dazu solltest du vielleicht noch mehr Angaben machen.
                        Welcher Browser? Wie hast du es versucht?

                        kopf.brett();

                        natürlich liefert es NULL wenn das eingabefeld leer bleibt >_<!

                        tut mir leid ;/

                        MFG
                        bleicher

                  3. echo $begrüßung;

                    xmlhttp.onreadystatechange = triggered();
                    Fällt dir was auf?
                    TBH - nein.

                    Möchtest du eine Referenz auf die Funktion übergeben oder möchtest du das Ergebnis eines Funktionsaufrufs übergeben?

                    echo "$verabschiedung $name";

  3. ich werde mich irgendwann mit ajax gründlich beschäftigen ;) bis es aber soweit ist - such ich kein ajax-tutorial (davon gibts ja eine menge), sondern eine "maximalmöglich valide" vorgefertigte-ajax-funktion die einfach nur eine URL als parameter bekommt und den rückgabestring returnt;

    Du weißt was das A in AJAX bedeutet? deshalb ist diese vorgehensweise nicht so ohne weiteres machbar bzw. nicht sinnvoll. D.h. eine minimale AJAX Anwendung startet einen Request und kann dann nach dem empfangen der kompletten Daten eine Callbackfunktion aufrufen und dieser dann den "Rückgabestring" übergeben.

    Struppi.

    1. Grüße,
      |D.h. eine minimale AJAX Anwendung startet einen Request und kann dann nach dem empfangen der kompletten Daten eine Callbackfunktion aufrufen und dieser dann den "Rückgabestring" übergeben.

      genau das meinte ich - mir gehts darum dass es function sowieso(url, id oder formularaten) nimmt und return string; am schluss hat ;P

      ich könnte zwar mit eigenem "wissen" iframes nutzen - aber ajax wäre da echt sinnvoller.

      MFG
      bleicher

      1. Grüße,
        |D.h. eine minimale AJAX Anwendung startet einen Request und kann dann nach dem empfangen der kompletten Daten eine Callbackfunktion aufrufen und dieser dann den "Rückgabestring" übergeben.

        genau das meinte ich - mir gehts darum dass es function sowieso(url, id oder formularaten) nimmt und return string; am schluss hat ;P

        Genau das meinst du nicht, da das bei AJAX so nicht geht, wie ich dir versucht habe zu erklären.

        Struppi.

        1. Grüße,

          |D.h. eine minimale AJAX Anwendung startet einen Request und kann dann nach dem empfangen der kompletten Daten eine Callbackfunktion aufrufen und dieser dann den "Rückgabestring" übergeben.

          genau das meinte ich - mir gehts darum dass es function sowieso(url, id oder formularaten) nimmt und return string; am schluss hat ;P

          Genau das meinst du nicht, da das bei AJAX so nicht geht,

          das zwischenstadium mit request etc, wollte ich ja mir ersparen - und dass alle beispielfunktionen eine 2e aufrufen um an diese die empfangenen daten zu übergeben habe ich auch bemerkt.

          hoffte allerdings dass man es umgehen kann - mir geht es nur um den handling der form onClick="javascript:ajax("blabla.php", id)" sodass element ID mit rückgabedaten gefüllt wird oder ajax("blabla.php", forumalarid);

          das ist so ziemlich die grenze meiner JSkentnisse, und darum fragte ich ja auch. ob zwischendurch 3+ funktionen daten anfordern , speichern und ausgeben, ist eine andere sache.

          ist sowas machbar/exestiert?

          MFG
          bleicher

          1. Yerf!

            ist sowas machbar/exestiert?

            Ja, mit "SJAX". Du kannst den Request am XMLHttpRequest-Objekt auch synchron starten (3. Parameter beim open()). Dann benötigst du keinen Callback und bekommst direkt das Ergebnis (der Programmablauf wird solange angehalten).

            Gruß,

            Harlequin

            --
            <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
  4. Hallo bleicher,

    Ich brauchte selber mal so ein AJAX-Minimum, habe mir dann Folgendes zusammengebastelt:

      
    function ajax(file, func_target, param1, param2, param3) {  
      var tmp_ajax_obj = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');  
      tmp_ajax_obj.open('post', file);     // post => no browser-cache  
      tmp_ajax_obj.onreadystatechange = function(){  
        if(tmp_ajax_obj.readyState == 4) // tmp_ajax_obj.status == 200 kann hier noch bei Bedarf eingefügt werden  
          if (func_target)  
            window[func_target](tmp_ajax_obj.responseText, param1, param2, param3);  
      }  
      tmp_ajax_obj.send(null);  
    }
    

    Erstes Paramter ist die Datei, zweites Paramter der Funktionsname (es muss eine globale Funktion sein, damit sie mittels window[func_target] aufgerufen werden kann).
    Danach können optional 3 Paramter folgen.

    Gruß,
    Dodwin

    --
    Dodwin