人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: kt26
●カテゴリ:ウェブ制作
✍キーワード:Ajax cache JavaScript jQuery PHP
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● mattn
●20ポイント

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

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

となるかと思います。

◎質問者からの返答

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

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

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

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


[追記]

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

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


2 ● ofk
●50ポイント

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

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ