2011-11-09 18 views
21

XMLHTTPRequestで変数をサーバーに送信するにはどうすればよいですか? など、GETリクエストのURLの末尾に追加するだけですか?XMLHTTPRequestで変数を渡すにはどうすればいいですか

だから、多かれ少なかれ:

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

このようにすることはできますが、疑問符の代わりにアンパサンドでキー/値のペアを区切る必要があります。したがって: '' blahblah.php?variable1 = "+ var1 +"&variable2 = "+ var2' – nnnnnn

+1

また、' var1'と 'var2'には予約文字が含まれていないので注意してください。 'encodeURIComponent()'でエスケープしたいかもしれません。 – nullability

答えて

28

あなたはイエスの方法だろうGETを使用してサーバーに変数を渡したい場合。それらを適切にエスケープ(urlencode)することを忘れないでください!

変数を表示したくない場合は、POSTを使用することもできます。

完全なサンプルは次のようになります。

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

はこれをテストするには、あなたが取得するかを確認することができvar_dump $_GET(PHPを使用して)。

+0

これはかなりいいです – rpivovar

6

GETリクエストで変数を渡すための正しい形式は

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

である。しかし、本質的に、あなたは正しい考えを持っています。

+0

よく見つかった:) – TJHeuvel

0

はい、これはGET要求で行う正しい方法です。

しかし、複数のクエリ文字列パラメータは、&

などで分離する必要があることを忘れないでください。 ?変数1 = VALUE1 &変数2 = value2の

1

後は、正しい方法である:

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

が手動でクエリ文字列の書式を設定することは、単純な状況に罰金です。しかし、多くのパラメータがあるときは面倒になることがあります。

クエリの書式設定を処理する簡単なユーティリティ関数を記述することができます。

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

そして、この方法でリクエストを作成します。

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" 

URLを操作するために利用できる多くのユーティリティ関数があります。あなたのプロジェクトにJQueryがあるなら、http://api.jquery.com/jquery.param/を試してみてください。

これは上記の関数例と似ていますが、ネストされたオブジェクトと配列を再帰的に直列化して処理します。

関連する問題