Ajax ошибка undefined

169
22 февраля 2018, 12:54

Всем привет! Я использую MySQL + PHP + Ajax Ошибка похоже возникает после обработки ajax'ом:

$(document).ready(function () {
    $('#country_id').change(function () {
        var country_id = $(this).val();
        if (country_id == '0') {
            $('#region_id').html('<option>- Введите регион -</option>');
            $('#region_id').attr('disabled', true);
            return(false);
        }
        $('#region_id').attr('disabled', true);
        $('#region_id').html('<option>Загрузка...</option>');
        var url = 'get_regions.php';
        $.get(
            url,
            "country_id=" + country_id,
            function (result) 
            {
                var options = ''; 
                $(result.regions).each(function() 
                {
                    options += '<option value="' + $(this).attr('region_id') + '">' + $(this).attr('name') + '</option>';
                });
                $('#region_id').html('<option value="0">- Введите регион -</option>'+options);
                $('#region_id').attr('disabled', false);    
            },
            "json"
        );
    });
});

и приложу get_regions.php где идёт обработка региона:

<?php
$connect = mysqli_connect("localhost", "login", "pass", "base");
mysqli_query($connect, 'SET CHARACTER SET "utf8"');
mysqli_query($connect, 'SET NAMES "utf8"');
$country_id = @strval($_GET['country_id']);
//$country_id = 3159;
$regs = mysqli_query($connect, "SELECT `group` FROM `$country_id` ORDER BY `group`");
if ($regs) 
{
    $num = mysqli_num_rows($regs);      
    $i = 0;
    while ($i < $num) 
    {
       $regions[$i] = mysqli_fetch_assoc($regs);   
       $i++;
    }     
    $result = array('regions'=>$regions);  
}
else 
{
    $result = array('type'=>'error');
}
print json_encode($result); 
?>

MySQL запрос работает хорошо (или нет), но отображается нужное количество регионов. Из-за чего undefined?

Answer 1

Попробуй в success добавить var obj = jQuery.parseJSON(result); и обращайся obj.regions

и print json_encode($result); замени на echo json_encode($result);

Answer 2

Думаю проблема в следующем коде

$(result.regions).each(function() {
  options += '<option value="' + $(this).attr('region_id') + '">' + $(this).attr('name') + '</option>';
});

Ты уверен что следует так обращаться к result? result.regions это не объект dom. попробуй просто пройтись циклом for по result.regions, а не методами jquery. например так

for (var i = 0; i < result.regions.length; i++) {
    options += '<option value="' + result.regions[i].region_id + '">' + result.regions[i].name + '</option>';
}
READ ALSO
Как подгружать скрипт в зависимости от разрешения экрана

Как подгружать скрипт в зависимости от разрешения экрана

Господа выручайтеИмеется скрипт, вот такого вида - знаю, скрипт костыльный, совсем не разбираюсь в javascript , но суть не в этом (работает и то хорошо)...

182
Сохранение значений input-ов в localStorage

Сохранение значений input-ов в localStorage

Есть 3 инпута, надо сохранить их значения в localStorageВсе три поля не может сохранить почему-то:

179
Многоуровневый подгружаемый select jquery

Многоуровневый подгружаемый select jquery

Мне нужно сделать многоуровневый подгружаемый селект на jqueryТ

170