Announcement

Collapse
No announcement yet.

Wie heißt der Parameter, den ich im XMLHTTP-Request sende?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie heißt der Parameter, den ich im XMLHTTP-Request sende?

    Hi,

    Ich bin extrem neu in PHP, um genau zu sein arbeite ich mich da gerade erst ein. Ich weiß, dass PHP in einem Script entweder beim Laden der Seite aufgerufen werden muss, oder ich einen XMLHTTP-Request erzeugen muss, um das auf dem Server auswertenzu lassen. Nun möchte ich in einem JavaScript eine bestimmte Aktion durchführen (einen Datenbankeintrag auf dem Server erstellen), ohne dass deswegen eine Seite neu geladen werden soll.

    Dazu hat mein Vorgänger eine php-Datei bereitgestellt, die eine Funktion Database::insertCommand($id,$param) liefert. Diese Funktion schreibt auf dem Server in eine bestimmte Datenbank einen neuen Datensatz, bestehend aus einem Integer und einem String.

    Nun habe ich also eine JavaScript-Function in meiner Webseite, die folgendermaßen aussieht:
    Code:
    function onButton()
    {
        var xmlhttp;
        if (window.XMLHttpRequest)
        {
            xmlhttp=new XMLHttpRequest();
        }
        else
        {
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.open("POST",'classes/http_request/domyaction.php', true);
        xmlhttp.send(document.getElementById("Parameter").value);
    }
    die PHP-Seite sieht nun verkürzt so aus:
    PHP Code:
    <?php
    error_report
    (E_ALL);
    require_once(
    "classes/Database.php");
    require_once(
    "templates/CommandIDs.php")

    $data=$_POST['diese Info suche ich'];
    Database:: insertCommand(CommandID_MyAction$data);
    ?>
    Ich habe schon mal gegoogelt, aber so wie es aussieht, brauche ich den Variablennamen um über $_POST auf den Inhalt zuzugreifen, ich habe aber keine Dokumentation für den XMLHTTP gefunden, die mal genauer sagt, unter welchem Namen ich den Inhalt überhaupt absende (oder ob ich im send einen Namen festlegen kann, der Art xmlhttp.send("varname='varcontent'").

    Die Beispieldateien, die mein Vorgänger mir hinterlassen hat nutzen den XMLHTTP-Request nur bei Parameterlosen aufrufen (also mit einem xmlhttp.send(null); ), da kann ich also nicht kopieren.

    Und: Ist es notwendig ein onreadystatechange zu definieren, wenn ich das sowieso nicht auswerte?

    Gruß
    Martin Dietz

  • #2
    http://www.developers-guide.net/c/11...tprequest.html

    var q = document.getElementById("q").value;
    q = encodeURIComponent(q);
    xhttp.open("GET","http://localhost/index.php?q="+q,true);
    xhttp.onreadystatechange=sendRequest_callback;
    xhttp.send(null);

    .....


    $q = isset ($_GET['q'])


    Christian

    Comment


    • #3
      Hallo,
      Originally posted by M.Dietz View Post
      ...keine Dokumentation für den XMLHTTP gefunden, die mal genauer sagt, unter welchem Namen ich den Inhalt überhaupt absende (oder ob ich im send einen Namen festlegen kann, der Art xmlhttp.send("varname='varcontent'").
      Das kann ich nicht glauben ... eine einfache Suche findet z.B. das hier: Methoden vom XMLHttpRequest-Objekt und da ist sehr eindeutig beschrieben, wie man bei einem XMLHttpRequest POST-Daten übergeben kann.

      z.B.:
      [highlight=javascript]
      ...
      var sendData = 'meinVar1=Hallo&meinVar2=Welt';
      xhttp.send(sendData);
      [/highlight]
      PHP Code:
      ...
      $meinVar1 $_POST['meinVar1'];
      $meinVar2 $_POST['meinVar2'];
      ... 
      Originally posted by M.Dietz View Post
      ...Und: Ist es notwendig ein onreadystatechange zu definieren, wenn ich das sowieso nicht auswerte?
      Wenn es dir egal ist was der Server auf deine Anfrage antwortet und was er damit macht, dann benötigst du auch kein onreadystatechange.

      Gruß Falk
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        Hi Falk,

        Danke für Deinen Link, bei meinen Google-Versuchen (allerdings hatte ich da noch zusätzliche Stichworte JavaScript und PHP) bin ich immer nur auf Beispiele mit GET gestoßen, die dann send(null) nutzen, und eine Klassenbeschreibung des XMLHTTP Objektes hatte ich gar nicht gefunden. Nach dem gefühlten 200. Link wieder nur mit GET hatte ich dann aufgegeben.

        Ich habe es jetzt mal ausprobiert mit folgenden Einstellungen:
        Code:
        function deleteFileOnServer(filedescription)
        {
        	var xmlhttp;
        	if (window.XMLHttpRequest)
        	{
        		xmlhttp=new XMLHttpRequest();
        	}
        	else
        	{
        		xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        	}
        
        	xmlhttp.open("POST",'classes/http_request/deleteFile.php',true);
        	xmlhttp.onreadystatechange = function()
        	{
        		if (xmlhttp.readystate == 4 && xmlhttp.status==200)
        		{
        			alert("Datei gelöscht.");
        		}
        	}
        	var param = 'fname='+filedescription;
        	xmlhttp.send(param);
        }
        und classes/http_request/deleteFile.php sieht so aus:
        PHP Code:
        <?php
        error_reporting
        (E_ALL);
        require_once(
        "../../CommandIDs.php");
        require_once (
        "../Database.php");
        require_once (
        "../Debug.php");

        $fname=$_POST['fname'];
        Database::insertCommand(REQ_CMD_DELFILE,$fname);
        ?>
        Ein Debuggen mit Firebug zeigt mir auch deutlich, dass param den Wert "fname=dailyreport" annimmt, trotzdem bekomme ich immer noch einen Undefined index fname on line 7 zurück, also irgendwas mache ich anscheinend doch noch falsch.

        Gruß
        Martin

        Comment


        • #5
          Hallo Martin,

          POST ist etwas aufwändiger als GET. Du musst zusätzlich noch ein paar Header, mindestens jedoch content-length setzen, damit das korrekt funktioniert.

          [highlight=javascript]
          ...
          var param = 'fname='+filedescription;
          xmlhttp.setRequestHeader('Content-Length', param.length);
          xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

          xmlhttp.send(param);

          [/highlight]

          Ausserdem solltest du sicherstellen, dass filedescription ordentlich (entsprechend x-www-form-urlencoded) kodiert ist.

          Anmerkung: Wesentlicher einfacher ist es natürlich ein AJAX-Framework (jQuery, MooTools, YUI, ...) zu verwenden.

          Gruß Falk
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment

          Working...
          X