AjaxでPHPにPOSTで送信し、その結果を受けてページ上に出力するプログラムを作っています。ライブラリにJQueryを使っています。


// 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"]という連想配列を扱いたいのですが、どうすればいいのでしょうか?

回答の条件
  • 1人2回まで
  • 登録:2009/12/10 12:16:01
  • 終了:2009/12/12 01:23:37

回答(2件)

id:mattn No.1

mattn回答回数104ベストアンサー獲得回数232009/12/10 12:32:07

ポイント20pt

すみません。上記の説明を勝手に解釈します。

リクエストの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);
  }
});

となるかと思います。

id:kt26

全く反応がありません・・。PHP側をprint_r($_POST)にしても、中身がない状態です。

jQueryは1.3.2ですし、エラーも特に出ていないようです。

ajaxで送信する前に、alert(art["test"])とすれば、ちゃんと1が表示されます。

もちろん、文字コードはUTF-8です。(PHPも)


[追記]

data: {"ary" : ary } を data: {"ary" : 1 } にしたら送信されているので、

やはり配列になると送信できないようです。

2009/12/10 13:30:11
id:ofk No.2

ofk回答回数12ベストアンサー獲得回数32009/12/10 22:24:43

ポイント50pt

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からは渡せるようになります。

id:kt26

基本的には「渡せない」という理由で納得しました。

2009/12/12 01:23:27
  • id:kn1967
    >配列になると送信できないようです

    ajaxといったって POST や GET は HTTPなんだから、
    配列そのままってのは、無理。
    配列を1つの変数にしてしまってから送信し、
    php側で分離するといったような措置が必要。

    最近のはてなの状況にモチベーションが下がりっぱなしなので、
    上記コメントだけ。
  • id:kt26
    つまりフォームタグで言う
    <form action="test.php" method="post">
    <input name="ary[a]" type="checkbox" value="1">
    <input name="ary[b]" type="checkbox" value="2">
    <input type="submit" value="send" />
    </form>

    みたいな事は出来ないと言う事ですね。
    Ajaxなら同じようにPHPにデータを渡せると思っていました。
    勉強になりました。
  • id:kn1967
    >フォームタグで言う

    そのフォームで送ってるのは配列とは、ちと違う。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません