4

次のデータがあるとします。

var arr = [], arr1 = [], arr2 = [], arr3 = [], arr4 = [];
var a = 'something', b = 'else';
arr1['key1-1'] = 'value1-2';
arr1['key1-2'] = 'value1-2';
for (var i = 0; i < someCond; i++) {
    arr = [];
    arr['key2-1'] = 'value2-1';
    arr['key2-2'] = 'value2-2';
    arr2.push(arr);
}

ここで、その穴を php スクリプトに渡す必要があります。

次のように単一の変数にパッケージ化しました。

var postVar = {
    a: a,
    b: b,
    arr1: arr1,
    arr2: arr2
};

私はjQueryを使用しているので、次のように投稿しようとしました:
1)

//Works fine for a and b, not for the arrays
$.post('ajax.php', postVar, function(response){});

そしてこれ:
2)

var postVar = JSON.stringify(postVar);
$.post('ajax.php', {json: postVar}, function(response){});

phpファイルで

$req = json_decode(stripslashes($_POST['json']), true);

これも機能しません。

データを PHP に送信するには、どのようにデータを構造化/フォーマットする必要がありますか?

ありがとう

編集:
ケース 1: console.log(postVar); console.log(postVar)

PHP print_r($_POST) 応答: 配列 ( [a] => something [b] => else )

ご覧のとおり、php 側には配列 (オブジェクト) はありません。

ケース 2:
以下を追加すると:

    postVar = JSON.stringify(postVar);
    console.log(postVar);

console.log(postVar) で {"a":"something","b":"else","arr1":[],"arr2":[[],[],[]]} を取得し
ます

この場合、それが問題のようです...そうですか?

4

2 に答える 2

0

そのようなストリップスラッシュを追加する前に、magic_quotes を確認する必要があります

if( get_magic_quotes_gpc() ) {
    $jsonString = stripslashes( $jsonString );
}
$data = json_decode( $jsonString );

魔法の引用符をオフにすることをお勧めします...それはまったく魔法ではありません

于 2012-07-05T17:59:06.387 に答える
0

結局のところ、配列オブジェクトですが、JSON.stringify は配列の非配列プロパティを無視します。そのため、すべての変数をオブジェクトとして明示的に宣言する必要がありました。実際に配列として使用される arr2 を除きます。

完全なコードは次のとおりです。

var arr = {}, arr1 = {}, arr2 = [];
var a = 'something', b = 'else';
arr1['key1-1'] = 'value1-2';
arr1['key1-2'] = 'value1-2';
for (var i = 0; i < 3; i++) {
    arr = {};
    arr['key2-1'] = 'value2-1';
    arr['key2-2'] = 'value2-2';
    arr2.push(arr);
}

var postVar = {
    a: a,
    b: b,
    arr1: arr1,
    arr2: arr2
};


postVar = JSON.stringify(postVar);
$.post('ajax.php', {json: postVar}, function(response){});

そしてPHP側では:

$req = json_decode($_POST['json'], true);
print_r($req);


これが同じ問題を抱えている他の人に役立つことを願っています。

于 2012-07-08T16:22:05.860 に答える