Ошибки при асинхронных 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 заключается в том, чтобы дождаться выполнения всех асинхронных запросов? Заранее благодарен за помощь! |
А перевести сообщения об ошибках не? По русски ведь написанно что у вас нет функции callback-function. Функции в какую обарачиваете ответ не существует
|
С ошибками как раз все понятно. Не понятен был момент, почему функция не существует, если имя в jsonpCallback и имя возвращаемой сервером функции совпадает и по отдельности все 3 запроса работают без ошибок.
Проблема в том, что во всех запросах используется одно имя колбек-функции, соответственно они друг друга переопределяют и выполняется только та, которая создалась последней (второй запрос выполняется дольше всех). Заменил имена функций на уникальные и все заработало. Спасибо за наводку! |
Цитата:
|
Совпадение имен при том, что если сервер отдаст функцию с другим именем, то получим ошибку. Я не вникал в технические подробности, но проверил это практически. К первоначальной проблеме это действительно не относится. Как я и написал выше, проблема решается уникальными именами колбек-функций. Если я в чем-то не прав, прошу указать на ошибки.
|
Часовой пояс GMT +3, время: 09:33. |