我想知道当我想在我的网络应用中使用angularJs(或类似)时,从后端获取数据的正确方法是什么?
我看到的唯一方法是使用来自后端的数据渲染html(带有js脚本的静态html - 例如angularjs),然后通过来自我的后端API的ajax请求下载数据。但我认为这个解决方案并不好,因为有很多HTTP请求:
例如我有博客网站,我想在侧边栏上显示帖子,评论和相关帖子。所以我可能需要至少发出3个HTTP请求来获取数据,除非我准备API以在一个请求中获得所需的全部内容。
我还可以想象可能有更多HTTP请求的网站。这是一个正确的方法吗?它不会使服务器超载吗?或者我的思维方式错了?
答案 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)
我认为你必须区分两种情况:
当然,在第二种情况下,通过单独的HTTP请求仅获取页面的一部分是有意义的。但是,在第一种情况下,您只需将完整模型序列化为一个JSON对象,并将其嵌入页面中,如下所示:
<script type="text/javascript">
var myCompleteModel = { /* Here goes your model */ };
<script>
然后,页面上组件的控制器可以访问此全局变量以提取与它们相关的部分。您还可以在服务中包装对初始模型的访问,以避免访问所有控制器中的全局变量。