2016-11-25 2 views
0

Я вынимаю изображения из Instagram с помощью json и jQuery.Looping через json с несколькими массивами

Данные json содержат объекты и массивы. Как-то я не могу зациклиться, хотя второй массив на моем пути вниз к значениям, которые мне нужны.

Это мой код:

var request = "./myapi.php?user=jamieoliver"; //&callback=myFunction 
$.ajax({ 
    cache: false, 
    dataType: "json", // or "jsonp" if we enabled it 
    url: request, 
    success: function(response) { 
    console.log(response); 
    for (var i = 0; i < response.entry_data.ProfilePage.length; i++) { 
     console.log(response.entry_data.ProfilePage[i].user.media.nodes[i].thumbnail_src); 
    } 
    }, 
    error: function(xhr, status, error) {} 
}); 

Проблема seens быть здесь: nodes[i] - узлы [] массив - и мой код не цикл через него - это только дает мне значение внутри первый объект внутри узлов []. Как выполнить цикл через узлы [], чтобы получить значение thumbnail_src внутри каждого из его объектов?

У меня нет данных в реальном времени, но вот скриншот структуры ответа JSon: enter image description here

+2

Удостоверение всегда высылается * код * нет изображений если можно. – Jim

+0

Я бы предпочел, что лучшим вариантом является использование расширенного или цикла for для объекта. –

ответ

4

Что-то вроде этого:

var request = "./myapi.php?user=jamieoliver"; //&callback=myFunction 
$.ajax({ 
    cache: false, 
    dataType: "json", // or "jsonp" if we enabled it 
    url: request, 
    success: function(response) { 
    console.log(response); 
    for (var i = 0; i < response.entry_data.ProfilePage.length; i++) { 
     for (var j = 0; j < response.entry_data.ProfilePage[i].user.media.nodes.length; j++) { 
      console.log(response.entry_data.ProfilePage[i].user.media.nodes[j].thumbnail_src); 
     } 
    } 
    }, 
    error: function(xhr, status, error) {} 
}); 
+0

Человек, он работает. Спасибо. :-) – Meek

1

Вы должны цикл, используя другой for:

var request = "./myapi.php?user=jamieoliver"; //&callback=myFunction 
$.ajax({ 
    cache: false, 
    dataType: "json", // or "jsonp" if we enabled it 
    url: request, 
    success: function(response) { 
    console.log(response); 
    var nodes; 
    for (var i = 0; i < response.entry_data.ProfilePage.length; i++) { 
     nodes = response.entry_data.ProfilePage[i].user.media.nodes; 

     for (var n = 0; n < nodes.length; n++) { 
     console.log(nodes[n].thumbnail_src); 
     } 
    } 
    }, 
    error: function(xhr, status, error) {} 
}); 
+0

Черт, Мне потребовалось слишком много времени, чтобы ответить. Ну, я предлагаю более чистый способ прокрутить второй 'for', используя' var nodes ', чтобы вы могли быстрее их прочитать и понять. – xWaZzo

+0

Это тоже полезно. Но не возможно ли создать какую-то функцию, которая автоматически перебирает каждый массив, с которым он сталкивается? Я имею в виду, что нам не нужно использовать несколько циклов для циклов? – Meek

+0

@Meek Хороший вопрос. Я сделал это в PHP, но он должен быть чем-то похожим в javascript. Вы должны сделать функцию, которая зациклирует каждый найденный массив/объект, а затем запустит ее внутри себя, если найдет другой массив/объект. Однако я не могу подумать, как мы можем использовать это, поскольку в вашем примере вы искали конкретный объект 'entry_data.ProfilePage [i] .user.media.nodes'. – xWaZzo

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