Кто-нибудь когда-либо успешно выслеживал необнаруженное исключение во время запроса ajax? - PullRequest
1 голос
/ 21 сентября 2009

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

$.ajax(error:..,success:..)

Я встретил это исключение в моем тесте:

необученное исключение: [Исключение ... «Компонент вернул код ошибки: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [NsIXMLHttpRequest.statusText]» nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE) "местоположение: "JS frame :: http://localhost/script/tab.js :: аноним :: строка 69 "данные: нет]

Код на стороне сервера:

$id = process();

И для целей тестирования у меня есть exit () in process ();

Это причина этого исключения? Если да, то почему?

EDIT Я посмотрел на строку, которая вызывает исключение, это функция обработки ошибок $ .ajax ()

error:function(XMLHttpRequest, textStatus, errorThrown){ 
    alert(XMLHttpRequest.statusText);alert(textStatus);alert(errorThrown);
}

Что-то здесь не так?

Ответы [ 7 ]

1 голос
/ 21 сентября 2009

httprequest также возвращает статус, такой как 200 == нормально, 404 == не найден, 12152 == соединение закрыто сервером и т. Д. Просто прочитайте, что они имеют в виду, чтобы вы могли их искать. Вы также можете по причинам отладки просто записать myhttprequest.status в документ, и он покажет, какой статус он вернул.

0 голосов
/ 11 февраля 2011

Я исправил это, указав тайм-аут в моем вызове ajax. Тайм-аут Ajax просто сдался после X времени. Несмотря на то, что страница закончила возвращать данные, объект ajax просто сдался и кинул, но выдал эту ошибку.

0 голосов
/ 18 декабря 2009

ты скучаешь {}?

$.ajax(error:..,success:..)

должно быть

$.ajax( { error: function( ){ } } );

если это так, извини, чувак, это было бы неприятно, если бы ты потратил столько времени на это, хаха

0 голосов
/ 21 сентября 2009

Есть четыре возможных сценария, которые вы можете получить:

  • сервер отсутствует или отклоняет соединение (это можно определить по библиотеке сокетов, которую использует браузер, которая сообщит об ошибке соединения)
  • соединение работает, и сервер возвращает неуспешный код ошибки - это возвращается в заголовке. Действительно, запрос может быть успешным (код 200) даже с пустым телом, это совершенно верно
  • соединение установлено, но сервер не отвечает - я не совсем уверен в деталях этого, но я ожидаю, что JS, в конечном счете, истечет время ожидания, потому что ответ не был получен и вернул ошибку, основанную на этом.
  • соединение установлено, но сервер отвечает неправильно (например, нет заголовков) - реализация JS должна вернуть это как ошибку.

В любом случае, все сценарии ошибок обрабатываются реализацией XMLHttpRequest ядра Javascript - jQuery просто оборачивает его интерфейсом чуть более аккуратным.

В вашем случае (теперь вы предоставили больше информации) я бы порекомендовал вам использовать Firebug, чтобы увидеть ответ сервера на ваш запрос. Тем не менее, вы не должны получать исключение для чего-либо неуместного с сервера, JS должен вызывать один и тот же ответный вызов ошибки для всех вышеупомянутых случаев.

0 голосов
/ 21 сентября 2009

http://docs.jquery.com/Ajax/jQuery.ajax#options

Дайте возможность успеха и ошибки. Эти функции будут вызваны после выполнения вызова.

0 голосов
/ 21 сентября 2009

Он все равно получит ответ от сервера с пустой частью данных. Если он вообще не получил ответа, это будет ошибкой.

0 голосов
/ 21 сентября 2009

Это зависит от кода состояния, который возвращает запрос. Успешный запрос возвращает код состояния в диапазоне 2xx, ошибка в диапазоне от 4xx до 5xx.

Для получения дополнительной информации см. Википедия: список кодов состояния HTTP .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...