2011-11-09 14 views
21

Jak wysłać zmienne do serwera przy pomocy XMLHTTPRequest? Czy po prostu dodaję je na końcu adresu URL żądania GET, np. ?variable1=?variable2= itp.?Jak przekazywać zmienne za pomocą XMLHTTPRequest

więc bardziej lub mniej:

XMLHttpRequest("GET", "blahblah.psp?variable1=?" + var1 + "?variable2=" + var2, true) 
+1

Możesz to zrobić w ten sposób, ale musisz oddzielić pary klucz/wartość za pomocą znaków ampersands, zamiast znaków zapytania. A więc: '" blahblah.php? Variable1 = "+ var1 +" & variable2 = "+ var2' – nnnnnn

+1

Upewnij się również, że' var1' i 'var2' nie zawierają samych znaków zastrzeżonych. Możesz chcieć uciec z nich za pomocą 'encodeURIComponent()'. – nullability

Odpowiedz

28

Jeśli chcesz przekazać zmienne do serwera przy użyciu GET, które byłyby tak droga. Pamiętaj, aby uciec (urlencode) poprawnie!

Możliwe jest również użycie testu POST, jeśli nie chcesz, aby twoje zmienne były widoczne.

Kompletny próbka będzie:

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); 

Aby to sprawdzić, (PHP) można var_dump $_GET, aby zobaczyć to, czego odzyskać.

+0

To jest całkiem niezłe – rpivovar

6

Poprawny format przekazywania zmiennych w żądaniu GET jest

?variable1=value1&variable2=value2&variable3=value3... 
       ^---notice &---^

Ale w zasadzie masz rację.

+0

Dobrze zauważył :) – TJHeuvel

0

Tak, jest to właściwa metoda, aby to zrobić za pomocą żądania GET.

Należy jednak pamiętać, że wiele parametrów ciągu zapytania powinny być oddzielone &

np. ? Variable1 = wartość1 & variable2 = value2

1

Poniżej poprawny sposób:

xmlhttp.open("GET","getuser.php?fname="+abc ,true); 
20

Ręczne formatowanie ciąg kwerendy jest w porządku dla prostych sytuacjach. Ale może być nudne, gdy jest wiele parametrów.

Można napisać prostą funkcję narzędzia, która obsługuje tworzenie formatowania zapytań.

function formatParams(params){ 
    return "?" + Object 
     .keys(params) 
     .map(function(key){ 
      return key+"="+encodeURIComponent(params[key]) 
     }) 
     .join("&") 
} 

I byłoby użyć to w ten sposób, aby zbudować żądania.

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" 

Dostępnych jest wiele funkcji narzędziowych do manipulowania adresami URL. Jeśli masz JQuery w swoim projekcie, możesz spróbować wypróbować http://api.jquery.com/jquery.param/.

Jest podobny do powyższej przykładowej funkcji, ale obsługuje rekursywne serializowanie zagnieżdżonych obiektów i tablic.

Powiązane problemy