2010-11-22 4 views
1

Я очень новичок в игре с JSON. Мне нужно повторить ответ JSON, исходящий от AJAX, на самом деле, я получаю значения checkboxe из таблицы db в форме на 2,3,7,9,3. Теперь я застрял с итерацией на каждом номере.jQuery.each - Как перебрать элемент объектов JSON?

Если вы запустите следующий код в области консоли FF, вы заметите, что он зацикливается на каждом цифровом NOT THE VALUE.

Прошу вас, руководствоваться.

var srv = {"services":"26,29"}; 

jQuery.each(srv.services, function(i, v) { 
    console.log(v); 
}); 

Любая помощь будет принята с благодарностью. THanks :)

ответ

7

srv.services - это строка значений, разделенных запятой, поэтому $.each() не будет работать правильно. Вы можете split() его в массив, хотя:

var srv = {"services":"26,29"}; 

jQuery.each(srv.services.split(","), function(i, v) { 
    console.log(v); 
}); 

Работа демо: http://jsfiddle.net/AndyE/veP4p/

Вы также можете иметь ваш сервис JSON возвращает массив вместо строки, например {"services":[26, 29]}. Это будет сделано для вас автоматически на сервере, если вы используете надлежащие JSON-совместимые методы для кодирования и если данные являются массивом.

+1

+1 за предложение изменить формат данных на уровне сервера. –

+0

Ты очень, Энди. вы дали мне хорошее представление о JSON. –

0

Не уверен, что это ответ на ваш вопрос, но учитывая заявление сверху, попробуйте расщеплению на , перед тем итерация:

var srv = {"services":"26,29"}; 

jQuery.each(srv.services.split(','), function(i, v) { 
    console.log(v); 
}); 

(Demo)

+0

Bugger! :) (filler) – jensgram

1

не действует массив JSON, ваш JSON данные должны быть что-то вроде этого:

var srv = {"services": ["26", "29"]}; 

..or из-причины можно разделить ваши строки данных с помощью JS разделения функции:

jQuery.each(srv.services.split(","), function(i, v) { 
    console.log(v); 
}); 
+0

Это была моя ошибка. Спасибо за исправление. –

0

Вы должны создать массив первого

var srv = {"services":"26,29".split(",")}; 

jQuery.each(srv.services, function(i, v) { 
    console.log(v); 
}); 
+0

Спасибо за ответ. :) –