2013-08-08 3 views
1

В приложении Angular JS Я работаю над этим, я периодически пользуюсь службой (в $timeout), чтобы сделать запрос GET URL-адресу в моем API (как приложение «Угловое», так и API обслуживается с порта 5000 на localhost).

По какой-то причине кажется, что $ http фактически не отправляет GET. Для каждого $http.get().error() вызывается с пустыми данными и имеет значение 0. Когда я проверяю свой серверный журнал (я запускаю бэкэнд Ruby on Rails с жемчужиной Unicorn для моего сервера), кажется, что сервер никогда не получает запрос от углового.

Вот функция в моей службы:

updateUserStatus =() -> 
    $http.get('/api/v1/status').success (statusData) -> 
     # update the variable and notify the observers 
     this.userStatus = statusData 
     notifyObservers() 
     startStatusTimeout() 
    .error (error, status) -> 
     # if there's an error, log it 
     console.log 'error:' 
     console.log error 
     console.log status 
     startStatusTimeout() 

Что действительно странно, что это происходит только иногда. Когда он перестает работать, я могу изменить URL-адрес в $http.get() до '/api/v1/status.json', и он работает. Какое-то время. Затем я переключу его назад, и он снова работает, на некоторое время ... очевидно, что в игре есть еще одна проблема.

Я уже несколько дней ломаю свой мозг, и я видел кучу подобных проблем на SO, но все они, похоже, решаются с внедрением CORS в Angular, что я не думаю, что это применимы к моей ситуации, потому что все это происходит от localhost:5000. Я ошибаюсь? Что происходит?

Для справки, я использую угловую версию 1.0.7.

+1

Вы проверили, действительно ли браузер отправляет что-то? Это может дать ключ. Например, в Google Chrome есть сетевая вкладка в средствах разработчика. Держите его открытым и создайте '$ http.get'. Посмотрите, если запрос погаснет, и проверьте его, если да. –

+0

Спасибо, я должен попробовать это. Я просто сделал быстрое исправление, которое я описал (изменяя URL-адрес), поэтому я проверю его, когда он перестанет работать снова. –

+0

Просто проверил вкладку в сети - браузер никогда не отправляет запрос GET. Для справки, я использую новейшую версию Chrome. Когда я загружаю страницу в Firefox, она успешно отправляет GET, но она может перестать работать и через некоторое время. Есть идеи? Обычно это происходит сразу после сохранения изменений в файлах Javascript/Coffeescript и обновления страницы. –

ответ

1

У меня была та же проблема. Проверьте свой код, чтобы узнать, произойдет ли это после событий, которые были выпущены из DOM, и неизвестны Angular. Если это так, вам нужно добавить $scope.$apply(); после запроса получения, чтобы это произошло.

Я довольно новичок в Угловом, поэтому я не уверен, что это лучшая практика использования углового, но это действительно работало в моем случае.

См. Это similar вопрос для лучшего объяснения.

+0

@James M - это сработало? – guytamir1

+0

Извините, в последнее время я фокусируюсь на других проектах, поэтому я не смог это проверить. Я попробую это скоро! –

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