2015-07-31 4 views
0

Я использую запрос GET ajax для извлечения некоторых данных JSON из базы данных. Я хочу пропустить его и распечатать некоторые элементы. Например, я хочу напечатать весь адрес только в stylist_1. Проблема в том, что он печатает только последний элемент.Получить запрос AJAX и Looping через JSON

Вот что код выглядит следующим образом:

var stylist1Addresses; 

    function getData() { 
     $.ajax({ 
      url: '/getData', 
      type: 'GET', 
      contentType: 'application/json; charset=utf-8', 
      dataType: 'json', 
      async: false, 
      success: function (data) { 
       for (var i = 0; i < data.stylist_1.length; i++) { 
        stylist1Addresses = data.stylist_1[i]; 
       } 
      } 
     }); 
     console.log(stylist1Addresses); 
    } 

Образец данных:

{ 
    "stylist_1": [ 
    { 
     "Address": "1 Stn Main", 
     "Phone": "403-990-9033" 
    }, 
    { 
     "Address": "474 Cirrus Rd", 
     "Phone": "403-995-3243" 
    }, 
    { 
     "Address": "1591 Stn St", 
     "Phone": "403-982-8893" 
    } 
    ], 
    "stylist_2": [ 
    { 
     "Address": "219 Welch Blvd", 
     "Phone": "587-436-3171" 
    }, 
    { 
     "Address": "374 Main Rd", 
     "Phone": "587-315-9431" 
    }, 
    { 
     "Address": "564 Main Rd", 
     "Phone": "403-938-9983" 
    } 
    ] 
} 
+1

Может быть, я упростить это, но вы хотите иметь консольный оператор внутри цикла? – TyP

+0

Если нет, возможно, вы должны использовать массив для хранения значений. стилист1Addresses [] = data.stylist_1 [i]; – TyP

ответ

3

Вот два возможных решения.

Первое решение:

var stylist1Addresses; 

    function getData() { 
     $.ajax({ 
      url: '/getData', 
      type: 'GET', 
      contentType: 'application/json; charset=utf-8', 
      dataType: 'json', 
      async: false, 
      success: function (data) { 
       for (var i = 0; i < data.stylist_1.length; i++) { 
        stylist1Addresses = data.stylist_1[i]; 
        console.log(stylist1Addresses); 
       } 
      } 
     }); 
    } 

Это будет производить три консоли журналов, один из каждого адреса.

Второе решение:

var stylist1Addresses = []; 

function getData() { 
    $.ajax({ 
     url: '/getData', 
     type: 'GET', 
     contentType: 'application/json; charset=utf-8', 
     dataType: 'json', 
     async: false, 
     success: function (data) { 
      for (var i = 0; i < data.stylist_1.length; i++) { 
       stylist1Addresses.push(data.stylist_1[i]); 
      } 
      console.log(stylist1Addresses); 
     } 
    }); 
} 

Это произведет один журнал консоли, массив всех трех адресов.

Что вы искали?

+0

Спасибо Ясен, я исправил это. – eddyjs

+0

Спасибо! Я искал первое решение, но хорошо знать и о втором решении. Ура! – mapr

1

Вы обновляете переменную 'stylist1Addresses' с каждым циклом.

попытка инициализации переменной 'stylist1Addresses' как массив, как это:

var stylist1Addresses = []; 

и заменить эту строку:

stylist1Addresses = data.stylist_1[i]; 

с этим:

stylist1Addresses.push(data.stylist_1[i]); 

'толчок' добавит элемент в каждый цикл в массив 'stylist1Addresses'.

Примечание:, если вы хотите, чтобы получить адрес только вы должны использовать эту линию вместо

stylist1Addresses.push(data.stylist_1[i].Address); 
0

Это, как я буду печатать адреса в stylist_1 только

<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script> 
<script> 
    var $string = '{THE JSON Here}'; 
    $json = $.parseJSON($string); 
    for (var i in $json) { 
     if (i === 'stylist_1') { 
     var list = $json[i]; 
     console.log(list[0].Address); 
     return; 
     } 
    } 
</script> 
Смежные вопросы