Показать сообщение отдельно
  #1 (permalink)  
Старый 26.03.2014, 23:15
Аспирант
Отправить личное сообщение для San4ezy Посмотреть профиль Найти все сообщения от San4ezy
 
Регистрация: 15.11.2009
Сообщений: 38

Ошибки при асинхронных AJAX запросах
Доброго времени суток!

Выявил странную ошибку, на странице производится 3 запроса к серверу методом $.ajax(). Сервер отдает все 3 ответа, но при этом колбек срабатывает только одного запроса, остальные генерят ошибки.

$(document).ready(function(){
            $.when(
                getRequest('GetProjectTypes', '', function(data){
                    alert('1');
                }),
                getRequest('GetTasksTable', 'project_type=2', function(data){
                    alert('2');
                }),
                getRequest('GetGroupUsers', 'group_id=1', function(data){
                    alert('3');
                })
            ).then(function(){alert("Done");});
        });


getRequest - функция, которая собственно и реализует запросы к серверу:

function getJSONP(url, callback, success){
    $.ajax({
        url: url,
        dataType: 'jsonp',
        jsonpCallback: callback,
        success: success,
        error: function(r, m, e){
            alert(e);
        }
    });
}

function getRequest(method, vars, success){
    getJSONP(
        'http://127.0.0.1:8000/test_api/' + method + '/?' + vars, 
        'callback_function', 
        function(data){
            if(data['status'] == 'ok'){
                success(data);
            }else{
                alert(data['data']);
            }
        }
    );
}


При загрузке страницы появляется алерт "Done", а затем алерт "2". При этом первый и третий запросы выдают ошибки "TypeError: callback_function is not a function" и "Error: callback_function was not called". Сервер на все запросы возвращает status: 200 и данные в виде "callback_function(<JSON>);". JSON валидный, проверял на jsonlint.
Почему возникают ошибки? Помогите исправить.

PS: Добавлю, что первый и третий запрос выполняются за 30-60 мс, а второй - за 2,5 с. Возможно это влияет на результат? Но если я правильно понимаю, то смысл метода when заключается в том, чтобы дождаться выполнения всех асинхронных запросов?

Заранее благодарен за помощь!
Ответить с цитированием