5

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

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

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

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

4

2 回答 2

1

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

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

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

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

如果您选择旧方法,那么在 Chrome 中加载 (readyState==3) 时会遇到很多问题,例如XmlHttpRequest.responseText

于 2013-11-10T12:22:00.997 回答
1

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

  1. 您第一次呈现页面。
  2. 当某些事情发生变化时,您会更新页面的某些部分

当然,在第二种情况下,通过单独的 HTTP 请求仅获取页面的一部分是有意义的。但是,在第一种情况下,您可以简单地将完整模型序列化为一个 JSON 对象并将其嵌入到页面中,如下所示:

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

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

于 2013-11-10T19:24:17.303 回答