【问题标题】:Managing synchronous XHR/Ajax call in AngularJs在 AngularJs 中管理同步 XHR/Ajax 调用
【发布时间】:2015-07-23 14:03:11
【问题描述】:

我有一个内置 angularJS 的产品,我已经创建了近 300 个控制器。所有控制器都有一个 XHR 调用(不是 $http 调用,它是基本的 javascript XMLHttpRequest )用于检查会话数据(通过在控制器开头调用服务)。在开始时我以同步方式创建它时犯了一个错误(在服务中定义了同步调用),现在它在 mozilla firefox 中已弃用,很快将在 chrome 中弃用。是否有另一种方法可以在不将所有控制器更改为 $watch 的情况下进行同步 XHR 调用?

var request = new XMLHttpRequest();
request.open('POST', 'path/to/my/APIservice', false);

感谢您的帮助。

【问题讨论】:

  • 您是否有理由希望调用是同步的?不推荐使用它们的原因是它们会阻止 UI,这会导致糟糕的用户体验。我建议弄清楚如何使它们异步(微不足道,但一个单独的问题)。
  • 首先感谢您的关注,实际上控制器中的所有代码都应该在从 API 获取会话数据后运行,所以我必须让控制器等到它回到我的 $根范围

标签: angularjs xmlhttprequest


【解决方案1】:

感谢 @Tom Jenkins 的友好回复, 我已经找到了解决方案。

我已经创建了一个新状态并从所有其他状态路由到该状态,然后将从新创建的状态/控制器异步加载 XHR 调用,并在获得响应后我用来将状态重定向到前一个状态加载的数据。

我不知道这是否是实际的解决方案,但它节省了我编辑所有 300 个 js 文件的时间。 :)

例如:

我正在刷新 home 状态,但它需要一些会话数据 从数据库加载以显示页面。然后我将状态重定向到 checkSession 状态并在该控制器中调用服务,并在该调用的承诺中将数据存储到 $rootScope 然后 使用 $state.go() 我再次将状态重定向到 home

【讨论】:

    猜你喜欢
    • 2017-01-26
    • 2016-09-17
    • 2014-05-21
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    • 2021-11-21
    相关资源
    最近更新 更多