はまったのでメモ書き。
<やりたいこと>
jQueryを使ってAJAXでPHPに配列を渡したい
<10/26:追記しました>
<前提>
・CentOS5.3
・PHP5.2.11
・jquery-1.3.2.min.js
<サンプルソース>
$.ajax({
type: “GET”,
url: “test.php”,
data: {
id:[1,2,3,4,5,6,7]
},
success: function(){
alert(‘成功しました’);
},
error: function(){
alert(‘エラーです’);
}
});
<問題点>
・jQueryは上記のソースで「id=1&id=2&id=3&id=4&id=5&id=6&id=7」というリクエストを行う
→同じキーで複数の値を送信する
・PHPは同じキーで複数の値が送信されていた場合、後から受け取ったものだけが有効になる
→上記ソースで受け取れるのは「array(1) { ["id"]=> string(1) “7″ } 」のみ
<解決方法>
見当たらない。
ので、別の方法を使えということか。
仕方ないので、当面は「カンマ区切りの文字列にしてPHP側で分割」という方法で回避しようと思いますが、
どうにかならないんだろうか?これは…
<10/26:追記>
コメントにて提案頂いた方法
data: {
“id[]“:[1,2,3,4,5,6,7]
},
で取得できました…!
これでvar_dumpの結果は
array(1) {
["id"]=>
array(20) {
[0]=>
string(1) “1″
[1]=>
string(1) “2″
[2]=>
string(1) “3″
……
}
となりました!!
HOGE-CHONさん、ありがとうございます!
<さらに追記>
var_dumpの結果を他のソースから持ってきて不思議なことになってしまっていたので修正しました。失礼しました。
“”でつながれた文字列で入っているってことはないですかね?
あるいは意外と、
data: {
”id[]“:[1,2,3,4,5,6,7]
},
で出来たりとか・・・。
試してないけど。
上記”"は”¥0”です。
半角ではうまく入らなかったようで。
>あるいは意外と、
>data: {
> ”id[]“:[1,2,3,4,5,6,7]
>},
>で出来たりとか・・・。
な ん と これで取得できましたー!!
すげー!ありがとうございます!!
string(2) って気になるね。
なぜ string(1) ではないのだろう・・・
NULL文字”¥0”が入っているのでしょうか?
HOGE-CHONさん
大変失礼しました…m(_ _)m
var_dumpの結果を他のソースから持ってきてしまったのでおかしな表示になってましたね。。
修正しました。