2015-07-20 6 views
1

Я новичок в jQuery и надеюсь, что кто-то может мне помочь с этим.jQuery: Как петля через многомерный массив

У меня есть вызов Ajax с функцией успеха (data), возвращающий массив, как показано ниже.

Теперь у меня есть прохождение этого цикла и для каждого «tID» мне нужно что-то сделать с соответствующим «контентом».

Я думал использовать что-то вроде следующего, но не мог понять, как применить это здесь:

$.ajax({   
    type: "post", 
    url: "ajax.php", 
    cache: "false", 
    data: { 
     node: 'fetchContent', 
     tIDs: tIDs 
    }, 
    success: function(data){ 
     $.each(data.arr, function(index, value){ 
      console.log(value.content); 
     }); 
    } 
}); 

Может кто-нибудь помочь мне с этим?

Пример массива Ajax (результат):

array(3) { 
    [0]=> 
    array(2) { 
    ["tID"]=> 
    int(1) 
    ["content"]=> 
    string(6) "Value1" 
    } 
    [1]=> 
    array(2) { 
    ["tID"]=> 
    int(2) 
    ["content"]=> 
    string(6) "Value2" 
    } 
    [2]=> 
    array(2) { 
    ["tID"]=> 
    int(3) 
    ["content"]=> 
    string(6) "Value3" 
    } 
} 

Большое спасибо заранее.

+0

В каком формате '.ajax.php' возвращает ваши данные? – George

+0

Можете ли вы опубликовать фактический ответ. Какой бы формат в настоящее время он не читается. –

+0

@RoryMcCrossan: Вот пример массива, который я разместил. – TaneMahuta

ответ

2

Вы можете использовать вложенные for loop для того же:

var i,j,arrayItem; 
for (i = 0; i < outerArray.length; ++i) { 
    arrayItem = outerArray[i]; 
    for (j = 0; j < arrayItem.length; ++j) { 
     console.log(arrayItem[j].tID); 
     console.log(arrayItem[j].content); 
    } 
} 

Edit (после обсуждения с OP):

Там нет необходимости для 2-D массив, 1D массив больше подходит, так массив становится:

var data= [ 
{ 
     "tID" : 1, 
     "content": "Value1" 
    }, 
    { 
     "tID" : 2, 
     "content": "Value2" 
    }, 
    { 
     "tID" : 3, 
     "content": "Value3" 
    } 
]; 

И for loop становится:

for(i=0;i<data.length;i++){ 
    console.log(data[i].tID); 
    console.log(data[i].content); 
} 

Смотрите скрипку: «http://jsfiddle.net/Lvkbtuwz/1/»

+0

Спасибо за это! Результат ajax в моем случае называется данными, поэтому мне пришлось бы заменить «outerArray» на «данные» в вашем решении? – TaneMahuta

+0

Да заменить «outerArray» на «данные». Вы очень приветствуем :) –

+0

Спасибо - я уже пробовал это, но потом я становлюсь неопределенным в консоли. – TaneMahuta

1

В PHP вы должны вернуться не массив, но json_encode ($ массив)

, то вы можете использовать массив в качестве объекта в JS.

----- Редактировать --- 21.07.2015 если массив в PHP выглядит следующим образом

echo json_encode(array(0 => array("name" => "Gen"), 1 => array("name" => "Peter"))); 

** Обратите внимание, что последовательные индексы массива 0,1 *

то JSON будет выглядеть следующим образом, может использоваться как массив каждый элемент в качестве объекта

[{"name":"Gen"},{"name":"Peter"}] //and then can you iterate using 
$.each(arrayFromPhp, function (index, obj) 
{ 
    console.log(obj.name); //will output gen and Peter 
}); 

Но если массив в PHP выглядит следующим образом

echo json_encode(array(3 => array("name" => "Gen"), 8 => array("name" => "Peter"))); 

** Обратите внимание, что индексы массива не являются последовательными 3,8 *

Тогда JSON выглядит любит это не массив больше

{"3":{"name":"Gen"},"8":{"name":"Peter"}} 

Затем вы должны повторять, как это

for (i in arrayFromPhp) 
{ 
    console.log(arrayFromPhp[i].name) //will output gen and peter 
} 
+0

Спасибо за это! Если я сделаю это на стороне PHP, что бы использовать для цикла в jQuery? – TaneMahuta

+0

Обновление: Я думаю, что это может быть способ пойти здесь, поскольку он упрощает часть jQuery, но мне все же понадобятся некоторые рекомендации относительно того, как с этим справиться. – TaneMahuta

1

Основная идея итерации через массивы может быть достигнута с помощью javascript.

массивы имеют функцию forEach, где вы можете перебирать элементы массива. Используйте следующий пример для создания своего решения.

Исходя из того, что вы получаете ответ JSON.

var response = JSON.parse(ajaxRespons); 
response.forEach(function(element,index){ 
    element.forEach(function(innerElement,index){ 
    //access ur inner elements here 
    }) 
}) 

Выше была только идея. Вы должны сделать некоторые пробные прогоны, чтобы получить эту идею.

Смежные вопросы