Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите распарсить JSON (https://javascript.ru/forum/misc/42437-pomogite-rasparsit-json.html)

next768 26.10.2013 14:16

Помогите распарсить JSON
 
Приветствую всех!
В 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\u0430\u044f \u043e\u0431\u043b."
     },
     {
        "id":"4925",
        "name":"\u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433 \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:


Часовой пояс GMT +3, время: 02:46.