JavaScript xmlhttprequest send mehrere parameter?

SourceCoder

Lt. Commander
Registriert
Apr. 2012
Beiträge
1.532
Schönen guten Tag Zusammen,

ich habe eine Frage und zwar möchte ich per XMLHttpRequest mehrere Paramtere per send() übergeben wie müsste die richtige Syntax aussehen?

Mein Beispiel Code:

Code:
var form = new FormData();
var url = "meinPhpScript.php";
// Request öffnen
request.open('post', url, true);
// Request senden
request.send(form);

Nun würde ich gern neben der Form noch zwei Informationen/Parameter mitschicken, wie genau müsste die Syntax aussehen?


Die anderen Werte:

TP=<?php echo $TYP; ?>&NR=<?php echo $NUMMER
 
PHP:
$.ajax({
    type: 'POST',
    // make sure you respect the same origin policy with this url:
    // http://en.wikipedia.org/wiki/Same_origin_policy
    url: 'http://nakolesah.ru/',
    data: { 
        'foo': 'bar', 
        'ca$libri': 'no$libri' // <-- the $ sign in the parameter name seems unusual, I would avoid it
    },
    success: function(msg){
        alert('wow' + msg);
    }
});

Quelle

so in etwa müsste das funktionieren (Achtung ist JQuery+AJAX).

kannst auch einfach in die variable data die Parameter wie bei GET reinschreiben (data = "?a=b&c=d&t=x")
 
Zuletzt bearbeitet:
iDave hat es auf den Punkt gebracht. GET-Parameter kannst du meines Wissens nach nur mittels jQuery komfortabel anhängen. Ohne diese Library wäre folgender Code eine Möglichkeit:

Code:
var url = "meinPhpScript.php?TP=" + typ + "&NR=" + number;

Das Aufbereiten der Variablen "typ" und "number" musst du aber selbst durchführen (jQuery würde dir diese Arbeit abnehmen). Stichwort: JS-Funktion encodeURIComponent().
 
Wieso kann ich nicht einfach so verwenden ^^?

Code:
var form = new FormData();
var url = "meinPhpScript.php";
// Request öffnen
request.open('post', url, true);
// Request senden
request.send(form + ?TP=" + typ + "&NR=" + number);
 
Bei GET muss die URL so aussehen: seite.php?hallo=welt&ein=beispiel
Bei POST ist die URL nur "seite.php" und die Parameter müssen in die send Anweisung (ohne URL davor!).
Zudem sollte man bei POST unbedingt den Content-type in einem Header mitsenden, damit die Browser die Parameter richtig verarbeiten
Zusammen sieht das so aus:
Code:
request.open("POST", "seite.php");
request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
request.send("hallo=welt&ein=beispiel");

Wie du die URL zusammenbaust und ob man GET oder POST nimmt ist letztendlich egal. Kommt immer auf den Anwendungsfall an.
 
Zuletzt bearbeitet:
iDave schrieb:
PHP:
$.ajax({
    type: 'POST',
    // make sure you respect the same origin policy with this url:
    // http://en.wikipedia.org/wiki/Same_origin_policy
    url: 'http://nakolesah.ru/',
    data: { 
        'foo': 'bar', 
        'ca$libri': 'no$libri' // <-- the $ sign in the parameter name seems unusual, I would avoid it
    },
    success: function(msg){
        alert('wow' + msg);
    }
});

Quelle

so in etwa müsste das funktionieren (Achtung ist JQuery+AJAX).

kannst auch einfach in die variable data die Parameter wie bei GET reinschreiben (data = "?a=b&c=d&t=x")

Kann man mit dieser Methode auch DOM Objekte senden? Den das ist ja mein Problem ich möchte das DOM Objekt Form und noch zusätzliche zwei Parameter.
 
puuhhhh das weiss ich nicht, müsstest mal ausprobieren, Webdevelopment ist bei mir zu lange her, damit ich es so genau in der Tiefe weiss.

PHP:
data: { 
        'foo': 'bar', 
        'ca$libri': 'no$libri',
         'form': new Form()
}

ich würde es einfach so mal probieren, im Grunde würde ich sagen was du mit reine JS machen kannst, geht mit JQuery auch.
 
SourceCoder schrieb:
Kann man mit dieser Methode auch DOM Objekte senden? Den das ist ja mein Problem ich möchte das DOM Objekt Form und noch zusätzliche zwei Parameter.

Wie willst du das denn Serverseitig verarbeiten? Wenn du Daten einfach aus einem Formular an den Server senden willst, würde ich ein DOM Objekt nicht empfehlen! Alleine schon, weil das schwer zu überprüfen ist und eine Sicherheitslücke erzeugen könnte. Wenn der Server Daten einliest sollte man die vor der Verarbeitung IMMER auf Gültigkeit überprüfen und gegebenenfalls ein PHP Filter drüber jagen. Man könnte Daten in Form von JSON (das sind auch nur string:value Paare und) übermitteln aber man sollte immer versuchen es bei AJAX so simpel wie möglich zu halten. Ein einfacher String (a=b&c=d...) mit Javascript/JQuery zusammenbauen und per GET oder POST senden ist die beste Praxis um Sachen ZUM Server zu senden. Für die Antwort gibt es da natürlich mehr Möglichkeiten.
 
Das FormData Objekt hat eine Funktion append mit der man noch Daten hinzufügen kann:
form.append("parametername", parameterwert);

Auf die Frage wie man das FormData Objekt verarbeitet: Ganz normal. Wenn man dies send übergibt, empfängt man auf Serverseite alle Variablen die in FormData angegeben sind per $POST["parametername"] (also hier beispielhaft in PHP angegeben)

Da hier FormData hier einigen unbekannt zu sein scheint:
Wenn man irgendwas hat wie:
<form id="test">
<input name="feld1" value="wert1"/>
<input name="feld2" value="wert2"/>
</form>
und man dann mit JS
var form = new FormData(document.getElementById("test"));
und das dann per xhrobject.send(form) versendet, hat man auf Server dem server $POST['feld1] = "wert1", $POST['feld2'] = "wert2"
Und wenn man eben neben den Formularfeldern noch irgendwas anderes mitsenden will, kann man append nutzen. Man kann das Objekt aber auch ohne Formular nutzen.
 
Achso :freak: FormData() kann man natürlich senden.
Da hat mein Hirn nicht geschaltet. Ich dachte er wollte ein beliebiges "DOM" Objekt senden :D Hab mich schon gewundert.
 
geisterfahrer schrieb:
Das FormData Objekt hat eine Funktion append mit der man noch Daten hinzufügen kann:
form.append("parametername", parameterwert);

Auf die Frage wie man das FormData Objekt verarbeitet: Ganz normal. Wenn man dies send übergibt, empfängt man auf Serverseite alle Variablen die in FormData angegeben sind per $POST["parametername"] (also hier beispielhaft in PHP angegeben)

Da hier FormData hier einigen unbekannt zu sein scheint:
Wenn man irgendwas hat wie:
<form id="test">
<input name="feld1" value="wert1"/>
<input name="feld2" value="wert2"/>
</form>
und man dann mit JS
var form = new FormData(document.getElementById("test"));
und das dann per xhrobject.send(form) versendet, hat man auf Server dem server $POST['feld1] = "wert1", $POST['feld2'] = "wert2"
Und wenn man eben neben den Formularfeldern noch irgendwas anderes mitsenden will, kann man append nutzen. Man kann das Objekt aber auch ohne Formular nutzen.

Danke geisterfahrer genau so habe ich es auch gelöst vergessen hier die Lösung zu posten xD.

PS: Kann geschlossen werden!
 
Zurück
Oben