【发布时间】:2023-03-18 14:14:02
【问题描述】:
在我正在开发的 Angular JS 应用程序中,我正在使用一项服务定期(在 $timeout 中)向我的 API 中的 URL 发出 GET 请求(Angular 应用程序和 API 均由本地主机上的端口 5000)。
由于某种原因,$http 似乎实际上并未发送 GET。对于每个$http.get(),.error() 使用空数据和状态 0 调用。当我检查我的服务器日志时(我正在为我的服务器运行带有 Unicorn gem 的 Ruby on Rails 后端),似乎服务器永远不会收到来自 Angular 的请求。
这是我的服务中的功能:
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()
真正奇怪的是它只发生有时。当它停止工作时,我可以将$http.get() 中的URL 更改为'/api/v1/status.json',它就可以工作了。一阵子。然后我把它切换回来,它又可以工作了一段时间......显然有一些更大的问题在起作用。
我已经绞尽脑汁好几天了,我在 SO 上看到了一堆类似的问题,但它们似乎都可以通过在 Angular 中实现 CORS 来解决,我认为这不适用我的情况,因为这一切都来自localhost:5000。我错了吗?怎么回事?
作为参考,我使用的是 Angular 1.0.7 版。
【问题讨论】:
-
你检查过浏览器是否真的发送了一些东西吗?这可能会提供一个线索。例如,谷歌浏览器在其开发者工具中有一个网络标签。保持打开状态,让
$http.get发生。查看请求是否发出,如果发出则检查它。 -
谢谢,我得试试看。我刚刚完成了我描述的快速修复(更改 URL),所以当它再次停止工作时我会对其进行测试。
-
刚刚检查了网络选项卡 - 浏览器从不发送 GET 请求。作为参考,我使用的是最新版本的 Chrome。当我在 Firefox 中加载页面时,它成功发送了 GET,但它也可能在一段时间后停止工作。有任何想法吗?它通常发生在我保存对 Javascript/Coffeescript 文件的更改并刷新页面之后。
-
我仍然遇到这个问题。我无法在 Firefox 中复制它,所以我猜这是 Chrome 的问题。当我重新启动浏览器时,它又可以工作了,但只是刷新页面并不能修复它。
-
同样,关闭选项卡并在另一个选项卡中重新打开页面也可以。
标签: angularjs