2014-12-10 4 views
1

У меня есть служба облаков. Я пытаюсь загрузить данные. Я могу использовать функцию jQuery $.ajax для получения этих данных без проблем - все ожидаемые коды состояния возвращаются.

AngularJS - это совсем другая история, и я понятия не имею, почему. Я использую службу $ http для get(...) моих данных. Я знаю, что есть несколько ошибок, из-за которых $ http может завершиться неудачно (404, если пользователь ошибается в окне регистрации, или 403, если они не аутентифицированы).

Тем не менее, независимо от того, что я пытаюсь, я получаю ответ status: 0 каждый раз, и это довольно бесполезно, как вы можете себе представить.

У меня есть основные функции следующим образом:

function get(config) { 
    $ionicLoading.show(); 

    return $http(config) 
     .then(function (data) { 
      console.log(data); 
      return data.data; 
     }, 
     function (data) { 
      console.log(data); 
      throw 'Connection error'; 
     }) 
     .finally(function() { 
      $ionicLoading.hide(); 
     } 
    ); 
} 

Я использую это, чтобы проверить соединение одного из моих облачных сервисов.

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

GET https://incorrect.myservice.com/ net::ERR_NAME_NOT_RESOLVED 

который хорош, что должно привести к 404 ошибке.

Но, возвращаемые данные в функцию обратного вызова ошибки:

Object {data: "", status: 0, headers: function, config: Object, statusText: ""} 

Что плохо - это не должно быть 0? Это должно быть 404. Я провел некоторое исследование, и похоже, что CORS немного болит в AngularJS $ http.

Однако, из того, что я прочитал, похоже, что CORS включен на моем сервере, потому что, глядя на ответ в Fiddler/Chrome/IE и т. Д., Все ответы возвращают Access-Control-Allow-Headers: * и Access-Control-Allow-Headers: *, что и требуется для CORS ,

response header

Так что я полностью потерял о том, как дальше отлаживать это, как я нужна такая функциональность в моем приложении. Но $ http, похоже, не ведет себя так, как должно быть?

Возможно, кто-нибудь поможет и предоставит указатель.

Все коды ошибок возвращаются со статусом: 0 и у меня есть no Идея почему?

+0

Зачем ему возвращать 404? 404 возвращается, когда сервер отвечает на 404, потому что ресурс не существует на сервере. Здесь вы пытаетесь отправить запрос на сервер, который не существует. Таким образом, вы не можете получить ответ, так как запрос даже не может быть отправлен. –

ответ

3

GET https://incorrect.myservice.com/ net::ERR_NAME_NOT_RESOLVED Which is good - that should result in a 404 error(?).

Nope. Если вы не можете разрешить имя хоста IP-адресу, вы не можете подключиться к нему через TCP-соединение, поэтому вы даже не можете отправить HTTP GET, и если вы не можете отправить запрос, вы не сможете получите ответ, в котором выйдет 404. Это сетевая ошибка более низкого уровня, и вы даже не получаете какой-либо HTTP-код, поэтому вы не получаете кода состояния HTTP.

Это также не ошибка CORS. Браузер (по крайней мере, Chrome) напечатает действительно четкое и явное сообщение об ошибке, если что-то пойдет не так с CORS.

+0

Спасибо, Питер. Любая идея, как диагностировать?Потому что я действительно почесываю голову. Я думал, статус 0 был «автономным» статусом? – keldar

+0

Нечего диагностировать, это ошибка, просто относитесь к ней соответствующим образом. Возможно, вы сможете получить немного больше информации, если вы вникнете в базовый экземпляр XmlHttpRequest, который представляет запрос (возможно, вы можете получить строку «ERR_NAME_NOT_RESOLVED»), но я не знаю подробностей, и вы можете рискнуть в браузере, зависимой землей. –

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