Wie sende ich Variablen mit XMLHTTPRequest
an den Server? Würde ich sie einfach am Ende der URL der GET
-Anfrage hinzufügen, wie ?variable1=?variable2=
usw.?
Also mehr oder weniger:
XMLHttpRequest("GET", "blahblah.psp?variable1=?" + var1 + "?variable2=" + var2, true)
Wenn Sie Variablen mit GET an den Server übergeben möchten, wäre dies übrigens der Fall. Denken Sie daran, sie ordnungsgemäß zu entschlüsseln (urlencode)!
Sie können auch POST verwenden, wenn Ihre Variablen nicht sichtbar sein sollen.
Eine vollständige Probe wäre:
var url = "bla.php";
var params = "somevariable=somevalue&anothervariable=anothervalue";
var http = new XMLHttpRequest();
http.open("GET", url+"?"+params, true);
http.onreadystatechange = function()
{
if(http.readyState == 4 && http.status == 200) {
alert(http.responseText);
}
}
http.send(null);
Um dies (mit PHP) zu testen, können Sie var_dump $_GET
sehen, was Sie abrufen.
Das manuelle Formatieren der Abfragezeichenfolge ist in einfachen Situationen ausreichend. Es kann jedoch langweilig werden, wenn es viele Parameter gibt.
Sie könnten eine einfache Dienstprogrammfunktion schreiben, die für Sie das Erstellen der Abfrageformatierung übernimmt.
function formatParams( params ){
return "?" + Object
.keys(params)
.map(function(key){
return key+"="+encodeURIComponent(params[key])
})
.join("&")
}
Und Sie würden es auf diese Weise verwenden, um eine Anfrage zu erstellen.
var endpoint = "https://api.example.com/endpoint"
var params = {
a: 1,
b: 2,
c: 3
}
var url = endpoint + formatParams(params)
//=> "https://api.example.com/endpoint?a=1&b=2&c=3"
Es gibt viele Hilfsfunktionen zur Bearbeitung von URLs. Wenn Sie JQuery in Ihrem Projekt haben, können Sie http://api.jquery.com/jquery.param/ versuchen.
Sie ähnelt der obigen Beispielfunktion, behandelt jedoch rekursiv serialisierte verschachtelte Objekte und Arrays.
Das richtige Format für das Übergeben von Variablen in einer GET-Anforderung lautet
?variable1=value1&variable2=value2&variable3=value3...
^ ---notice &--- ^
Aber im Grunde haben Sie die richtige Idee.
Folgendes ist der richtige Weg:
xmlhttp.open("GET","getuser.php?fname="+abc ,true);
Wenn Sie allergisch gegen die Verkettung von Zeichenfolgen sind und keine IE Kompatibilität benötigen, können Sie URL
und URLSearchParams
verwenden ] _ :
const target = new URL('https://example.com/endpoint');
const params = new URLSearchParams();
params.set('var1', 'foo');
params.set('var2', 'bar');
target.search = params.toString();
console.log(target);
Oder um die Parameter eines ganzen Objekts zu konvertieren:
const paramsObject = {
var1: 'foo',
var2: 'bar'
};
const target = new URL('https://example.com/endpoint');
target.search = new URLSearchParams(paramsObject).toString();
console.log(target);
Wie wäre es mit?
function callHttpService(url, params){
// Assume params contains key/value request params
let queryStrings = '';
for(let key in params){
queryStrings += `${key}=${params[key]}&`
}
const fullUrl = `${url}?queryStrings`
//make http request with fullUrl
}
Ja, das ist die richtige Methode, um dies mit einer GET-Anfrage zu tun.
Beachten Sie jedoch, dass mehrere Abfragezeichenfolgeparameter mit & getrennt werden sollten.
z.B. Variable1 = Wert1 und Variable2 = Wert2