2012-04-06 3 views
1

Чтобы проверить, что происходит, когда я пытаюсь загрузить несуществующий ресурс (на том же хосте, что и мой веб-сервер), я создал следующий код:

var wrongURL = "http://foo/bar.json"; // non-existent resource 
$.ajax({ 
    url: wrongURL, 
    dataType: 'json', 
    success: function(jsonResponse, textStatus, jqXHR) { 
     $.('#divOfInterest').html("you should never see this"); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     $.('#divOfInterest').html("sorry, could not find URL"); 
    } 
}); 
// remainder of code... 

Вместо того, чтобы видеть мое ДИВ показать сообщение sorry, could not find URL, я получаю ошибку консоли:

GET http://foo/bar.json 404 (Not Found) - bar.json 

Все, что в пределах error вызова и после $.ajax() блока (т.е. // remainder of code) не получает казнены

Похоже, мой браузер (Safari 5.1.5) застревает в ошибке 404 и уходит из функции раньше.

Как я могу обработать ошибку изящно и выполнить остальную часть моего кода?

+0

Он также работает над сафари 5.0.2 – ocanal

ответ

1

Просто замените $.('#divOfInterest') с $('#divOfInterest'): D

Демо: http://jsfiddle.net/9Ua8J/

+0

Нет, эта ошибка, очевидно, не связана с ошибкой. – freakish

+0

С точками это показывает ошибку: 'XML-фильтр применяется к не-XML-значению' без вывода, см. Здесь: http://jsfiddle.net/SuHDP/ – stewe

+1

Да, предполагается, что вызов ajax фактически входит в обратные вызовы , Но внимательно прочитайте вопрос: при сбое JavaScript при попытке подключения к несуществующему ресурсу. Также мне удалось воспроизвести ошибку в Chrome (с правильным JS), хотя jsFiddle работает, что еще более странно. – freakish

2

Из моего понимания вам нужен сервер на самом деле вернуть состояние ошибки для этой функции ошибки для запуска.

Например, если вы запросите объект JSON для несуществующего пользователя в Soundcloud, вы получите ошибку 404, возвращаемую с сервера.

Однако вы ошибаетесь в полном URI, тогда нет никакого ресурса, возвращенного вообще, и никакого кода статуса тоже.

+0

На самом деле есть статус, он равен нулю. просто проверьте jqXHR.status === 0 – Hoffmann

Смежные вопросы