2010-03-27 8 views
2

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

$.ajax({ 
     type: 'POST', url: './', data: 'token=' + token + '&re=8', cache: false, timeout: 5000, 
     success: function(html){ 
      auth(html); 
      var JSON_array = eval(html); 
      alert(JSON_array[0].username); 
     }       
    }); 

Это возвращает данные правильно, но я хочу выполнить своего рода «foreach». массив содержит данные о нескольких входящих и исходящих мгновенных сообщениях. Поэтому, если пользователь разговаривает с более чем одним человеком за раз, мне нужно пройти. структура массива выглядит следующим образом.

Array 
(

    [0] => Array 
     (
      [username] => Emmalene 
      [contents] => 
          <ul><li class="name">ACTwebDesigns</li><li class="speech">helllllllo</li></ul> 
          <ul><li class="name">ACTwebDesigns</li><li class="speech">sds</li></ul> 
          <ul><li class="name">ACTwebDesigns</li><li class="speech">Sponge</li><li class="speech">dick</li></ul> 
          <ul><li class="name">ACTwebDesigns</li><li class="speech">arghh</li></ul> 
     ) 

) 

любая помощь очень ценится.

ответ

5

Ну так как вы используете JQuery уже можно использовать each функцию:

$.ajax({ 
     type: 'POST', url: './', data: 'token=' + token + '&re=8', cache: false, timeout: 5000, 
     success: function(html){ 
      auth(html); 
      var JSON_array = eval(html); 
      $.each(JSON_array, function(index, data) { 
       $('someelement').append(data.contents); 
      }); 
     }       
    }); 
2

Вместо оценки HTML, вы можете даже указать JSON в качестве возвращаемого типа ...

Итерация легко, когда используя $.each:

$.ajax({ 
    type: "POST", 
    data: ..., 
    url: url, 
    dataType: "json", 
    success: function(data) { 
     $.each(data, function(i, item){ 
      // do something with every item in data 
      // you can reference items in data via 
      // data.fieldName 
     }); 
    } 
}); 

Но for ... in петля не намного сложнее:

$.ajax({ 
    ..., 
    dataType: "json", 
    success: function(data) { 
     var fields = data.fieldName; 
     var value; 
     for (value in fields) { 
      // do something with value 
     } 
    } 
}); 
+0

продолжать получать неопределенные –

+0

В какой момент именно? Работает ли JSON как возвращаемый тип? Имеете ли вы 'console.log' данные? – Leo

1

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

$.ajax({ 
    type: 'POST', url: './', data: 'token=' + token + '&re=8', cache: false, timeout: 5000, datatype: 'json', 
    success: function(html){ 
     auth(html); 
     var JSON_array = eval(html); 
     $.each(JSON_array, function(index, data) { 
      var talk_to = JSON_array.username; 
      var contents_to_update = JSON_array.contents; 
     }); 
    }       
}); 

это который сделал работу:

1) использование Eval. 2) тип данных: 'json' 3) использование функции jquery $ .each

+0

Пробное программирование и ошибка? Я не мог понять, почему eval должен быть необходим, если вы вернете правильный JSON ... – Leo

+0

в значительной степени. Я видел примеры json, в которых они используют eval, поэтому я попытался, и это сработало! –

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