Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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 заключается в том, чтобы дождаться выполнения всех асинхронных запросов?

Заранее благодарен за помощь!
Ответить с цитированием
  #2 (permalink)  
Старый 26.03.2014, 23:26
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

А перевести сообщения об ошибках не? По русски ведь написанно что у вас нет функции callback-function. Функции в какую обарачиваете ответ не существует

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

С ошибками как раз все понятно. Не понятен был момент, почему функция не существует, если имя в jsonpCallback и имя возвращаемой сервером функции совпадает и по отдельности все 3 запроса работают без ошибок.
Проблема в том, что во всех запросах используется одно имя колбек-функции, соответственно они друг друга переопределяют и выполняется только та, которая создалась последней (второй запрос выполняется дольше всех).
Заменил имена функций на уникальные и все заработало.
Спасибо за наводку!
Ответить с цитированием
  #4 (permalink)  
Старый 27.03.2014, 09:10
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от San4ezy
jsonpCallback и имя возвращаемой сервером функции совпадает
А причём совпадение имён в отправке и возврате обёртки к наличию функции с данным именем?
Ответить с цитированием
  #5 (permalink)  
Старый 27.03.2014, 21:48
Аспирант
Отправить личное сообщение для San4ezy Посмотреть профиль Найти все сообщения от San4ezy
 
Регистрация: 15.11.2009
Сообщений: 38

Совпадение имен при том, что если сервер отдаст функцию с другим именем, то получим ошибку. Я не вникал в технические подробности, но проверил это практически. К первоначальной проблеме это действительно не относится. Как я и написал выше, проблема решается уникальными именами колбек-функций. Если я в чем-то не прав, прошу указать на ошибки.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При наборе адреса с www не работает AJAX (JQuery)! madmis AJAX и COMET 3 23.11.2009 19:03
Кодировка при использовании Ajax Nichloas AJAX и COMET 9 17.09.2009 16:06
Проблема с AJAX запросом + mod_rewrite BrokenEye AJAX и COMET 1 12.07.2009 02:08
Неверный результат в AJAX с получением HTML Raynor AJAX и COMET 3 17.12.2008 18:38
Как узнать какие ошибки произошли при парсинге xml файла faunder Events/DOM/Window 0 12.09.2008 14:17