AngularJS从后端获取数据

时间:2013-11-10 12:15:07

标签: angularjs web frontend backend

我想知道当我想在我的网络应用中使用angularJs(或类似)时,从后端获取数据的正确方法是什么?

我看到的唯一方法是使用来自后端的数据渲染html(带有js脚本的静态html - 例如angularjs),然后通过来自我的后端API的ajax请求下载数据。但我认为这个解决方案并不好,因为有很多HTTP请求:

例如我有博客网站,我想在侧边栏上显示帖子,评论和相关帖子。所以我可能需要至少发出3个HTTP请求来获取数据,除非我准备API以在一个请求中获得所需的全部内容。

我还可以想象可能有更多HTTP请求的网站。这是一个正确的方法吗?它不会使服务器超载吗?或者我的思维方式错了?

2 个答案:

答案 0 :(得分:1)

它是websockets或HTTP请求。准备API以获取所有一个请求是一种选择。另外两个选项是XMLHttpRequest / iframe流,这是一种称为Comet的技术方法。

我会使用websockets,因为它应该解决以前用iframe流等奇怪的应用程序解决的问题。如果浏览器不支持websockets,有些库可以正确处理回退:

web-socket-js(这需要一个websocket服务器)

Socket.IO(这有一个node.js模块,并且还在websocket协议之上实现了一种不必要的协议)

如果您选择旧方法,那么在路上会遇到很多问题,例如XmlHttpRequest.responseText while loading (readyState==3) in Chrome

答案 1 :(得分:1)

我认为你必须区分两种情况:

  1. 您是第一次呈现该页面。
  2. 您在更改内容时更新部分内容
  3. 当然,在第二种情况下,通过单独的HTTP请求仅获取页面的一部分是有意义的。但是,在第一种情况下,您只需将完整模型序列化为一个JSON对象,并将其嵌入页面中,如下所示:

    <script type="text/javascript">
      var myCompleteModel = { /* Here goes your model */ };
    <script>
    

    然后,页面上组件的控制器可以访问此全局变量以提取与它们相关的部分。您还可以在服务中包装对初始模型的访问,以避免访问所有控制器中的全局变量。