// Javascript側
var ary =[];
ary["test"] = 1;
$.ajax({
type:"POST",
url:"test.php",
data:"ary="+ary,
cache:false,
success: function(str){
$("#preview").text(str);
}
});
// PHP側
print_r($_POST["ary"]);
としているのですが、反応がありません。
連想配列の部分を ary[0] = 1 というようにすると、結果が出力されます。
PHP側で $_POST["aray"]["test"]という連想配列を扱いたいのですが、どうすればいいのでしょうか?
すみません。上記の説明を勝手に解釈します。
リクエストのary(arayではなく)パラメータとして変数aryの中身を送信されたいのであれば
var ary =[]; ary["test"] = 1; $.ajax({ type:"POST", url:"test.php", data: {"ary" : ary }, cache:false, success: function(str){ $("#preview").text(str); } });
となるかと思います。
URLのデータを構築している関数である $.param がオブジェクトに対応していません。従って、以下のような形で、関数を書き換えると動作します。
(function ($) { var originalparam = $.param; $.param = function (obj) { var strarr = [], param = {}; for (var i in obj) { if (typeof obj[i] === "object") { var tmp = []; for (var j in obj[i]) { tmp.push(encodeURIComponent(i + "[" + j + "]") + "=" + encodeURIComponent(obj[i][j])); } strarr.push(tmp.join("&")); } else { param[i] = obj[i]; } } strarr.push(originalparam(param)); return strarr.join("&"); }; })(jQuery); var ary = {}; // オリジナルではここが配列になっているのでおかしい ary["key1"] = 1; ary["key2"] = 2; $.ajax({ type: "POST", url: "test.php", data: { ary: ary }, cache: false, success: function (str) { $("#preview").text(str); } });
これはあくまで関数の例なので、適当求める形(階層が深くなる場合の対応等)に実装して下さると幸いです。
いずれにしても、現行の1.3.x系列ではオブジェクトを渡すことはできません。1.4からは渡せるようになります。
基本的には「渡せない」という理由で納得しました。
全く反応がありません・・。PHP側をprint_r($_POST)にしても、中身がない状態です。
jQueryは1.3.2ですし、エラーも特に出ていないようです。
ajaxで送信する前に、alert(art["test"])とすれば、ちゃんと1が表示されます。
もちろん、文字コードはUTF-8です。(PHPも)
[追記]
data: {"ary" : ary } を data: {"ary" : 1 } にしたら送信されているので、
やはり配列になると送信できないようです。