2010-12-10 3 views
2

У меня есть следующий JQuery Ajax вызов (Там нет других глобальных параметров/обработчиков):Почему 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. Что означает сообщение , записанное на консоль?

Спасибо!

ответ

2

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

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

1

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

Вы можете попробовать использовать тип 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); 
    } 
}); 
+0

Я слишком рано приветствовал ... Теперь не вызывается ни «успех», ни «ошибка», а консоль отображает: «Не удалось загрузить ресурс» - любые идеи? – 2010-12-10 12:35:31

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