2013-03-11 103 views
0

嗨最初我的阵列看起来是这样的多维JSON编码关联数组的PHP JS

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中每个阵列中循环,以及如何将其分配给两个数组(水果和蔬菜)

我已经试过

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

但没有奏效。

+0

当你说它没有工作,它以什么方式不起作用? – 2013-03-11 23:20:52

+0

PHP关联数组json-decode到javascript对象。 – 2013-03-11 23:24:28

回答

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 
    }; 
}); 

一般情况下,你不会希望分配objobj.fruitsobj.vegetables成员在外部范围,因为它们是不可用的,直到Ajax响应已经到来。您通常会在success范围(以及由此调用的函数)中执行obj.fruitsobj.vegetables所需的所有操作。

+0

谢谢非常好的答案。我不能赞成(没有足够的声望) – Athanatos 2013-03-12 10:45:52

+0

Athanatos,如果/当你准备好这样做时,你应该能够接受答案(大绿色勾号)。 – 2013-03-12 11:22:00

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; 
    }); 
}); 
+1

为什么?所有需要的数据已经在'obj'中。它已准备好使用。你所做的只是复制它。如果你确实需要一个副本,那么使用jQuery的'$ .extend()'。 – 2013-03-11 23:37:16