【问题标题】:AngularJS $http not sending GET requestAngularJS $http 不发送 GET 请求
【发布时间】: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


【解决方案1】:

我遇到了同样的问题。 检查您的代码,看看这是否发生在从 DOM 触发且 Angular 未知的事件之后。 如果是这样,您需要在获取请求后添加$scope.$apply(); 才能实现。

我对 Angular 还很陌生,所以我不确定这是使用 Angular 的最佳做法,但它在我的情况下确实有效。

请参阅此similar 问题以获得更好的解释。

【讨论】:

  • 抱歉,我最近一直在关注其他项目,所以无法查看。不过,我会尽快尝试!
猜你喜欢
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
  • 1970-01-01
  • 2014-09-02
  • 1970-01-01
  • 2015-06-02
  • 2015-03-15
  • 1970-01-01
相关资源
最近更新 更多