JavaScript Zwei Parameter übergeben

Pfandfinder

Lieutenant
Registriert
Nov. 2020
Beiträge
619
ich habe derzeit so einen Teil in meiner Seite:

index.php:
HTML:
<html>
<input type="text" name="usereingabe" onkeyup="searchFor(this.value)">

<div id="ergebnis"></div>

<script src="input.js"></script>
</html>


input.js:
Javascript:
function searchFor(usereingabe){
    var xmlHttp = null;
    if (typeof XMLHttpRequest != 'undefined'){
        xmlHttp = new XMLHttpRequest();
    }
    if (!xmlHttp){
        try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e){
            try {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch(e){
                xmlHttp = null;
            }
        }
    }
    if (xmlHttp) {
        var url = "suchen.php";
        var params = "usereingabe="+usereingabe;
        xmlHttp.open("POST", url, true);
        xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xmlHttp.setRequestHeader("Content-length", params.length);
        xmlHttp.setRequestHeader("Connection", "close");

        xmlHttp.onreadystatechange=function (){
            if (xmlHttp.readyState == 4){
                document.getElementById("ergebnis").innerHTML=xmlHttp.responseText;
            }
        };
        xmlHttp.send(params);
    }
}

suchen.php:
PHP:
<?php
echo '<p>'.$_POST['suchbegriff'].'</p>';
echo 'GET-Parameter: <p>'.$_POST['parameterzwei'].'</p>';

Damit wird die Eingabe nach jedem Tippen verarbeitet, in dem Beispiel einfach als echo ausgegeben.

Jetzt möchte ich die index.php mit ?parameterzwei=IRGENDWAS aufrufen, sodass "parameterzwei" ebenfalls in der suchen.php bekannt ist und verarbeitet werden kann. Aber ich weiß nicht wie ich das umsetzen kann. in der index.php ist ja keine form, es wird ja nur das Textfeld beachtet und dessen Eingabe verarbeitet...
 
Zuletzt bearbeitet:
Javascript:
params += "parameterzwei="+IRGENDWAS;
nach Zeile 19
Frag mich aber ob der allgemeine Aufbau so das wahre ist. Hab da zu wenig Ahnung von der JS+PHP Kombi.
 
Hi...

Woher kommt denn der "parameterzwei"?
Und auch wenn man durchaus JS-Variablen an PHP übergeben kann, so bleibt, dass PHP als Scriptsprache nunmal auf dem Server ausgeführt wird, was einen Reload für Verarbeitungen von Variablen in PHP-Seiten unumgänglich macht.​
 
Javascript:
// hier kommts drauf an
function objectToParameters(obj) {
  var str = [];
  for (var p in obj)
    if (obj.hasOwnProperty(p)) {
      str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
    }
  return str.join("&");
}



function searchFor(usereingabe){
    var xmlHttp = null;
    if (typeof XMLHttpRequest != 'undefined'){
        xmlHttp = new XMLHttpRequest();
    }
    if (!xmlHttp){
        try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e){
            try {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch(e){
                xmlHttp = null;
            }
        }
    }
    if (xmlHttp) {
        var url = "suchen.php";
        var paramsObject = {
             "usereingabe": usereingabe,
             "was_anderes": "was_anderes_wert"

        }
        // funktion siehe oben
        var params = objectToParameters(paramsObject);
        xmlHttp.open("POST", url, true);
        xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xmlHttp.setRequestHeader("Content-length", params.length);
        xmlHttp.setRequestHeader("Connection", "close");

        xmlHttp.onreadystatechange=function (){
            if (xmlHttp.readyState == 4){
                document.getElementById("ergebnis").innerHTML=xmlHttp.responseText;
            }
        };
        xmlHttp.send(params);
    }
}
 
Aber der Wert von "parameterzwei" wird ja per GET im Browser festgelegt. Wenn ich index.php?parameterzwei=apfel aufrufe, muss auch im JS das weitergegeben werden ans PHP.
 
Pfandfinder schrieb:
Aber der Wert von "parameterzwei" wird ja per GET im Browser festgelegt.
Nee... der "Content" in einem POST-Request sieht nur wenn du es so codierst genau so aus, als wäre es ein QueryString aus der URL... Es wird aber nicht an die URL angehangen, sondern im Body mit gesendet, wie es beim POST üblich ist.

Hast du dir mein Beispiel mal angeschaut? Das sollte wirklich klappen. Dort wird ein JavaScript Object in einen Parameter-String umgewandelt. Wichtig ist, dass es über "encodeURIComponent" sogar noch richtig codiert wird, wenn Sonderzeichen verwendet werden.
 
glaube du verstehst es falsch 😅

Also jetziger Stand:

Ich rufe die index.php auf, schreibe etwas in das Textfeld und die Eingabe erscheint bei jedem Tastendruck direkt darunter.

So soll es sein:

Ich rufe index.php?parameterzwei=apfel auf. Schreibe ich jetzt etwas in das Textfeld, erscheint nachwievor immer die Eingabe und zusätzlich soll PHP von dem Wert "apfel" Bescheid wissen zum verarbeiten, das wird quasi per echo ebenfalls ausgegeben. "apfel" ändert sich ja aber nie, außer ich ändere die URL.
 
Ich würde mir auch mal die moderne Variante des JS Code anschauen, evtl. ist die einfacher zu verstehen. Deine Variante enthält noch Code damit das auch in IE5 funktioniert, heute macht man das ganze nicht mit XMLHttpRequest sondern mit Fetch.

Meine Vermutung nach deinem letzten Post ist das du zwei unterschiedliche Requests durcheinanderbringst, und deshalb die anderen Antworten hier nicht das machen was du willst. Es gibt den GET request der das HTML zurückgibt, und den POST den das Formular sendet (evtl. noch unterschiedliche URLs je nachdem wie das aufgebaut ist). Die Antworten beziehen sich auf den POST. Wenn du das über die URL Adresse des Formulars steuern willst, musst du den Parameter erstmal in JS auslesen und dann an den POST Request dranhängen. Ich bin mir aber auch nicht sicher ob das das ist was du meinst.
 
Zuletzt bearbeitet:
Zurück
Oben