Почему jQuery не вызывает мой обработчик ошибок Ajax? - PullRequest
2 голосов
/ 10 декабря 2010

У меня следующий вызов jQuery Ajax (других глобальных настроек / обработчиков нет):

$.ajax( { 
   url: "http://www.blah.com/url/does/not/exist", 
   type: "get",
   data: someData,
   dataType: "json",
   error: function (xhr, msg, ex)
   {
       alert("Failed: " + msg);
   },
   complete: function (xhr, msg)
   {
       alert("Done: " + msg);
   }

Я ожидаю вызова моего обработчика ошибок, но вместо этого запускается событие complete ипредупреждение отображает Done: success.В консоли Javascript я вижу следующее сообщение:

XMLHttpRequest cannot load http://www.blah.com/url/does/not/exist. 
Origin null is not allowed by Access-Control-Allow-Origin.
  1. Почему не вызывается мой обработчик ошибок?
  2. Что означает записанное в журнал сообщение Originна консоль?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 20 декабря 2010

Похоже, единственный способ - получить ответ сервера в моем методе success и сохранить его в глобальной переменной, которую я проверю в обработчике для complete (который всегда вызывается).Отсутствие ответа означает, что запрос не выполнен.

Это простой способ обработки ошибок в этой превосходной библиотеке.

1 голос
/ 10 декабря 2010

Ваш обработчик ошибок не вызывается, потому что AJAX-запрос даже не выполняется: браузер отказывается это делать из-за той же политики происхождения : запрашиваемые вами данные поступают изСайт отличается от сайта, обслуживающего вашу страницу.

Вы можете попробовать использовать тип данных JSONP для решения проблемы:

$.ajax({ 
    url: "http://www.blah.com/url/does/not/exist", 
    type: "get",
    data: someData,
    dataType: "jsonp",
    error: function(xhr, msg, ex) {
        alert("Failed: " + msg);
    },
    complete: function(xhr, msg) {
       alert("Done: " + msg);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...