цикл полученной строки JSON, чтобы получить значения по JQuery

0

Я пытаюсь проанализировать данные, возвращенные из $.post().

[{"id":"1","text":"USD"},
 {"id":"2","text":"CNY"},
 {"id":"3","text":"PHP"},
 {"id":"4","text":"AUD"},
 {"id":"5","text":"SGD"},
 {"id":"6","text":"JPY"}]

используя этот подход JQuery, зацикливая на json-массив

Я сделал что-то вроде этого:

$.post(
    base_url+'cgame/currency',
    { gameID: gameID },
    function(data) {
        $(this).html();
        $.each(data,function(idx, obj) {
            $(obj).each(function(key, value) {
                console.log(key + ": " + value);
            });
        });
    }
);

но это дает мне ошибку:

Uncaught TypeError: не может использовать оператор 'in' для поиска '120' в [{"id":"2","text":"CNY"},{"id":"3","text":"PHP"},{"id":"4","text":"AUD"},{"id":"5","text":"SGD"},{"id":"6","text":"JPY"}]

Я также пробовал:

$.post(
    base_url+'cgame/currency',
    { gameID: gameID },
    function(data) {
        $(this).html();
        $(data).each(function(idx, obj) {
            $(obj).each(function(key, value) {
                console.log(key + ": " + value);
            });
        });
    }
);

но это также дает мне ошибку:

Uncaught Error: Синтаксическая ошибка, непризнанное выражение: [{"id":"1","text":"USD"},{"id":"6","text":"JPY"}]

Как я должен это делать?

  • 1
    Я предполагаю, что вам нужно проанализировать JSON-строку (данные) для объекта JSON, прежде чем выполнять итерацию по нему. Попробуйте JSON.parse (data) и выполните итерацию по нему.
  • 0
    спасибо .. ты спас меня
Теги:

4 ответа

1
Лучший ответ
 function(data) {
    var value = JSON.parse(data);
    $.each(value ,function(idx, obj) {
       console.log("id : "+obj.id+" "+text:"+obj.text);
    });
 }
2

Ваши данные поступают в виде массива, поэтому вам нужно прокручивать каждый индекс, а затем извлекать значения. Таким образом, вы можете заменить это:

 $(obj).each(function(key, value) {
     console.log(key + ": " + value);
 });

с :-

 $.each( obj, function( key) {
     console.log( obj[key].id + ':' + obj[key].text);
 });

или вы можете сделать это: -

 $.each( obj, function( key, value ) {
     console.log( value.id + ':' + value.text);
 });

key - это индекс массива. Он вернет 0,1,2..

  • 0
    да, спасибо .. твой второй ответ был также вещью, которую я узнал из предложений eggward и fibbe.
1

Я думаю, что аргумент, переданный вашей функции обратного вызова, имеет тип string. Измените его на:

 function(data) {
var parsedData = JSON.parse(data);
    $(this).html();
    $.each(parsedData ,function(idx, obj) {
        $(obj).each(function(key, value) {
            console.log(key + ": " + value);
        });
    });
}
  • 0
    спасибо за ваши усилия: я уже нашел ответ, основанный на вашем и комментарии выше моего поста.
  • 1
    это дает результат 0: [объект объекта] grid.js: 159 0: [объект объекта] grid.js: 159 0: [объект объекта] grid.js: 159 0: [объект объекта] grid.js: 159 0 : [объект объекта] grid.js: 159 0: [объект объекта]. Нет ошибки, но значения не отображаются правильно. Так что я сделал, чтобы удалить второй цикл вашего кода.
0

попробуй это

$.post(base_url+'cgame/currency',{ gameID: gameID },
 function(data) {
    $(this).html(); //<-- becareful $(this) might not be the element you think it is
    $.each(data,function(idx, obj) {
        console.log( "id : " + obj.id);
        console.log( "text: " + obj.text);
   });
 },'JSON');
  • 0
    извините, но все равно выдает вторую ошибку на моем посте. но спасибо за помощь: D
  • 0
    Я думаю, что ошибка есть откуда-то еще ..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню