Ошибки при асинхронных 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, время: 15:02. |