Здравствуйте, я заметил, что этот простой код не работает так, как он должен работать ...
function test() {
$.ajax( {
'url' : 'test/GameConfiguration.json',
'dataType' : 'json',
data : {
a : 'aaa'
},
cache : false,
method : 'get',
timeout : 10000, //10 secs of timeout
success : function(data, textStatus, XMLHttpRequest) {
console.log("success");
if (data == null)
console.log("it's not a real success");
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
console.log("error: " + textStatus);
}
});
}
Тест был запущен на локальном хосте, я имею в виду: я загружаю страницу, закрываю локальный веб-сервер, затем запускаю запрос (с помощью простой кнопки с нажатой клавишей мыши, указывающей на эту функцию). Ошибка никогда не вызывается, я получаю вызов обработчика успеха с textStatus = "success" и data = null. Я даже замечаю, что время ожидания запроса превышает 10 секунд.
Это происходит в Firefox (последняя версия), Chrome (последняя версия) и Safari 5. Почему это? Это из-за того, что я работаю на localhost?
Я забыл сказать: запрос не кэшируется. На самом деле, и инструменты Firebug, и Chrome dev показывают запрос на неудачу.
Большое обновление
Это поведение связано с использованием localhost. Фактически, если я загружаю эту страницу с другого компьютера-коллеги и, прежде чем инициировать запрос, отключаю свой компьютер от сети, у меня правильно срабатывает обработчик ошибок с тайм-аутом в качестве состояния. Я думаю, что это ошибка в JQuery. Мне будет сложно проверить ошибки таймаута :(
Ребята из форумов jQuery говорят, что это связано с тем, как сетевой стек прерывает соединение, учитывая, что хост является localhost. Я проверял это только на Windows 7. Если вы хотите протестировать это на других системах и можете поработать с некоторыми внутренними компонентами jQuery, сообщите об этом на форумах jQuery:
http://forum.jquery.com/topic/strange-and-unexpected-behaviour-of-ajax-error-and-localhost#14737000001331961