Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   зависимые списки select (https://javascript.ru/forum/dom-window/47083-zavisimye-spiski-select.html)

zazula 07.05.2014 22:19

зависимые списки select
 
Добрый вечер! Пытаюсь сделать зависимые списки select и видимо где-то ошибка. Так как я только разбираюсь в ajax, не могу понять где она. Помогите, пожалуйста. Мне кажется, что ошибка где-то в запросе, т.к. при выборе категории выходит alert "При выполнении запроса произошла ошибка " Но что именно не так с запросом? Заранее благодарю за помощь!
Сам запрос
$tip = $mysqli->query("SELECT *
            FROM  `tip`
            WHERE  `id_kat` =  '".$_POST['kat_id']."'");       
        $arr = array();
        while($row = mysqli_fetch_assoc($tip)){
           $arr[] = array($row['tid'] => $row['tname']);
        }
        return $arr;
    
 
if (!isset($_POST['query']) || !$_POST['query']) {
    exit("Нет данных определяющих тип запроса");
}
else {
    
    $query = trim($_POST['query']); 
    // Определяем тип запроса
    switch($query) {
    case 'getTip':  
        // Формируем массив с ответом
        
        $result = NULL;
        $i = 0;
        foreach ($arr as $tip_id => $tip) {
            $result[$i]['tip_id'] = $tip_id;
            $result[$i]['tip'] = $tip;
            $i++;
        }
        
    break;
    
    default:
        // Если данные не определены
        $result = NULL;
    break;
    }
}

(function () {    
    "use strict"; 
    jQuery(function () {        
        $( '#kat' ).change(function () {            
            $( '#tip').find( 'option:not(:first)' ) 
                .remove()                   
                .end()      
                .prop( 'disabled',true );             
            var kat_id = $( this ).val();            
            if (kat_id == 0) { return; }            
            $.ajax({
                type: "POST",   
                url: "query.php",   
                dataType: "json",   
                data: "query=getTip&kat_id=" + kat_id,  
                error: function () {    
                    alert( "При выполнении запроса произошла ошибка :(" );  
                },
                success: function ( data ) {                    
                    for ( var i = 0; i < data.length; i++ ) {                        
                        $( '#tip' ).append( '<option value="' + data[i].tip_id + '">' + data[i].tip + '</option>' );
                    }
                    $( '#tip' ).prop( 'disabled', false );  
                }
            });
        });
    }); 
})();

jsnb 08.05.2014 06:59

Данные до сервера доходят? Сервер возвращает корректный JSON? Путь до php скрипта корректно в запросе указан?

zazula 08.05.2014 07:49

А как узнать доходят ли данные до сервера?
Путь до PHP скрипта это тот что в параметре "data" указан? Вопросы у меня, наверно, глупые, но я сосем не знакома ни с ajax ни с javascript, только пытаюсь разобраться во всем этом. Поэтому параметр "data" не уверена, что правильно написан. Запрос на PHP проверяла, он работает.

jsnb 08.05.2014 08:00

Цитата:

Сообщение от zazula (Сообщение 310836)
А как узнать доходят ли данные до сервера?

Посмотреть на сервере выполняется ли php скрипт при запросе или нет... Как вариант прописать сохранение какой-нибудь файла при запуске скрипта или еще какие-нибудь косвенные операции, которые помогут понять запускался ли скрипт вообще или нет и какие данные ему приходят.

Цитата:

Сообщение от zazula (Сообщение 310836)
Путь до PHP скрипта это тот что в параметре "data" указан?

Это то что указано в url параметре. Там сейчас query.php и это значит, что query.php должен лежать в той же директории, что и страница откуда запускается аякс запрос.

Еще у вас указан dataType: "json", а это значит, что php скрипт должен возвращать данные в формате JSON, если он вернет данные в другом формате, то будет ошибка при попытке распарсить эти данные.

zazula 08.05.2014 08:18

query.php есть, в конце файла данные преобразуются в формат json, так что с этим тоже должно быть все в порядке. Попробую проверить, доходят ли данные до сервера

jsnb 08.05.2014 08:39

И сделайте вывод ошибки на стороне клиента так:
error: function (xhr, status, error) {    
  alert( status + ' | ' + error );  
}

И скажите что оно у вас там выводит.

zazula 08.05.2014 08:54

parsererror | SyntaxError: Unexpected end of input
Я так понимаю, что что-то с запросом PHP не так?

jsnb 08.05.2014 09:02

Цитата:

Сообщение от zazula (Сообщение 310849)
parsererror | SyntaxError: Unexpected end of input
Я так понимаю, что что-то с запросом PHP не так?

Данные в некорректном формате с сервера приходят. У вас там точно корректный JSON возвращается?

zazula 08.05.2014 09:08

не знаю, еще не проверила. не могу понять, как именно формат проверить

jsnb 08.05.2014 09:12

Цитата:

Сообщение от zazula (Сообщение 310851)
не знаю, еще не проверила. не могу понять, как именно формат проверить

Поменяйте свой ajax на такой:
$.ajax({
                type: "POST",   
                url: "query.php",   
                dataType: "text",   
                data: "query=getTip&kat_id=" + kat_id,  
                error: function () {    
                    alert( "При выполнении запроса произошла ошибка :(" );  
                },
                success: function ( data ) {                    
                    alert(data) 
                }
});

И посмотрите что там у вас сервера приходит.


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