0

こんにちは最初、私のアレイは次のようになりました

PHP

$results = array(
    "banana" => $bananavalue,
    "apple" => $applevalue,
);
echo json_encode($results);

JS

var fruits = [];
$.ajax({
  type: "POST",
  url: "actions/MYphp.php",
  data: PassArray,
  dataType: 'json',
  beforeSend: function (html) {
    //    alert(html);
  },
  success: function (html) {
    var obj = html;
    // Now the two will work
    $.each(obj, function (key, value) {
      fruits.push([key, value]);
    });

ただし、以下のように果物と野菜の多次元に変更したいと思います。

results = array(
    "fruit"=>array(
        "banana" => $bananavalue,
        "apple" => $applevalue
    ),
    "vegetables"=>array(
        "lettuce" => $lettuce,
        "cabbage" => $cabbage
    )
);
echo json_encode($results);

問題は、Javascriptの各配列をループして、2つの配列に割り当てる方法です(果物と野菜)。

私が試してみました

$.each(obj['fruit'], function(key, value) {
  fruits.push([key, value]);
});

しかし、それはうまくいきませんでした。

4

2 に答える 2

1

PHPとは異なり、javascriptには連想配列がありません。

JSONでエンコードされたPHP連想配列は、JavaScriptのプレーンオブジェクトにデコードされます。

javascriptのデータにアクセスするには:

$.ajax({
    type: "POST",
    url: "actions/MYphp.php",
    data: PassArray,
    dataType: 'json',
    success: function(obj) {
        //do whatever is required with obj.fruits and obj.vegetables here
    };
});

一般に、ajax応答が到着するまでメンバーは使用できないため、外部スコープのメンバーにobjまたはを割り当てたくないでしょう。通常、スコープ(およびそこから呼び出される関数)で必要なすべてのことを実行します。obj.fruitsobj.vegetablesobj.fruitsobj.vegetablessuccess

于 2013-03-12T00:29:59.233 に答える
0

PHPの場合と同じように、2つのループをネストします。

$.each(obj, function(keyOfOuterArray, innerArray) {
   // keyOfOuterArray equals to vegetables, fruit
   console.log(keyOfOuterArray); 

   $.each(innerArray, function(keyOfInnerArray, valueOfInnerArray) {
     //valueOfInnerArrayis your inner array value
     console.log(keyOfInnerArray, valueOfInnerArray); 
   });
});

あなたの質問に答えるためにこれをしてください:

var myNewObj = {};
$.each(obj, function(keyOfOuterArray, innerArray) {
   $.each(innerArray, function(keyOfInnerArray, valueOfInnerArray) {
      myNewObj[keyOfOuterArray][keyOfInnerArray] = valueOfInnerArray;
   });
});
于 2013-03-11T23:20:37.887 に答える