Вход

Просмотр полной версии : Помогите распарсить JSON


next768
26.10.2013, 14:16
Приветствую всех!
В js недавно, поэтому прошу помощи.
Пишу регистрацию на сайте, и через ajax делаю выбор страны,региона,города.

Есть вот такой вот скрипт на стороне клиента:
function loadRegion(select) {
$.post("/ajax/reg", {selectId: select.value, selectType: 'region'},
function(data){
var json_regions = JSON.decode(data.data);
alert(jon_regions);
}, 'json');
}
Функция loadRegion() вызывается при выборе select:
<select name='country' id='sel12' onchange="loadRegion(this)">
<option valye='null'>Выберите страну</option>
<option valye="1">Россия</option>
<option valye="2">Америка</option>
</select>

Сервер возвращает мне список всех регионов принадлежащим выбранной стране в формате JSON:

{
"status":true,
"message":null,
"data":[
{
"id":"4312",
"name":"\u041c\u043e\u0441\u043a\u0432\u0430 \u0438 \u041c\u043e\u0441\u043a\u043e\u0432\u0441\u043a\u 0430\u044f \u043e\u0431\u043b."
},
{
"id":"4925",
"name":"\u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u 0433 \u0438 \u043e\u0431\u043b\u0430\u0441\u0442\u044c"
}
]
}


В firebug пишет: JSON.decode is not a function
Подскажите пожалуйста как мне добраться до полей name и id?

danik.js
26.10.2013, 14:20
Что-такое JSON.decode? Может JSON.parse?
Тебе аргументом уже объект отдают, если ты передал последним параметром $.post'а строку 'json', ничего не нужно уже парсить.

next768
26.10.2013, 14:40
Что-такое JSON.decode?
Гуглил, и нашел этот способ.
Может JSON.parse?
Его тоже пробовал.

ничего не нужно уже парсить.
Ок. Скажите тогда как мне добраться до полей name и id?

P.S Гуглил по этому поводу очень много, но т.к только начал учить js не понимаю половины примеров в интернете. Прошу помочь мне :)

danik.js
26.10.2013, 14:55
data.name?

next768
26.10.2013, 15:29
data.name?
Нет.
У меня же там несколько элементов.
Вся задача состоит в том чтобы все элементы, которые мне возвращает сервер вывести в следующий select.

Вот html двух селектов:

<td class="form-reg-table-td step-1">
<div>
<label>Страна</label>
<select name='country' id='sel12' onchange="loadRegion(this)">
<option valye='null'>Выберите страну</option>
<?foreach($countrys as $country):?>
<option value="<?=$country->id?>"><?=$country->name?></option>
<?endforeach?>
</select>
</div>
</td>
<td class="form-reg-table-td step-1">
<div>
<label>Область</label>
<select class="chzn-select" name='region'>

</select>
</div>
</td>


Мне нужно чтоб при выборе страны в select с id='region' подгружался список регионов, принадлежащих выбранной стране.


Сервер у меня возвращает 3 параметра:
status - статус выполнения запроса (если допустим была запрошена не существующая запись то вернет false)
message - сообщение о ошибке (допустим запрашиваемой записи нет, и сервер вернет еще сообщение "Данной записи не существует")
data - данные, если они нужны в ответ.
* Это у меня организована так архитектура приложения. На все запросы ajax возвращается 3 параметра.


Так вот, я не могу понять как мне перебрать этот список элементов которые находятся в data.

Если бы это было бы php, то выглядело так бы:


$array_json = array (
'status' => true,
'message' => null,
'data' => array (
'1' => array (
'name' => 'Московская область',
'id' => '123'
),
'2' => array (
'name' => 'Ростовская область',
'id' => '321'
)
)
);

И разобрал бы я его так:

foreach ($array_json['data'] as $json_elem) {
echo "<option valye='" . $json_elem['id'] . "'>" . $json_elem['name'] . "</option>"
}

P.S Просто с JSON форматом работаю первый раз..

danik.js
26.10.2013, 15:40
Переименуй data в response, если уважаешь логику.
И тогда response.data[1].name, response.data[2].name и тд.

next768
26.10.2013, 15:45
То что нужно! Благодарю :victory: