大量使用ajax的问题-如何在页面上呈现html最初和后来,因为它被修改
Heavy use of ajax question - how to render html on a page initially and afterwards as it is modified?
我相信这是当今许多web应用程序的常见问题。重用html模板的最佳方法是什么,以便在最初呈现页面和向页面添加新内容时不会翻倍?
-
我可以像正常一样呈现HTML页面,但不具体填充任何数据。然后,页面的每个部分将负责使用Javascript呈现自己。这种方法的好处是,javascript用于呈现所有可更新的内容。这里也有一个非常好的关注点分离,页面上的每个部分都有自己的事情。
缺点是我在加载每个页面时向服务器发出多个请求
-
我可以发送由服务器生成的HTML片段,只是将它们添加到页面的任何部分。这使得页面的初始加载非常快。它还重用相同的服务器端模板代码,因此也没有重复。
缺点是我不能进一步检查。另一个缺点是前置/追加非常有限。如果我想维护它的排序方式呢?如果是按字母顺序排列的,用户无论如何都必须刷新屏幕才能获得正确的排序顺序。
-
我可以发送一个JSON数据结构,就像在1 -然而,我也可以添加完全生成的html模板。这将使我能够在决定如何将对象前置/追加到页面之前先检查对象。
这里唯一真正的缺点是我必须在我的控制器中手动调用Freemarker(我使用Spring 3.0)。x MVC)。这通常是自动为我完成的。我肯定有办法做到这一点,但我必须花一些时间研究如何做到这一点。
实际上,这给了我1和2的所有好处,但它也是最复杂的解决方案。传输的数据量也高于其他两种方案…
哪种方式被认为是最好的?还有其他方法吗?我正在建设的应用程序是非常复杂的,并将使用大量的ajax。等效的纯html版本是不可能的。事实上,我甚至不打算构建非javascript用户可以使用的应用程序。哦。所以当你回答的时候记住这一点;)
谢谢
我将使用moustache.js为模板部分填充从JS收集的值。
如果你不想在初始加载时使用ajax,你可以在初始html的脚本标签中以json格式编写初始页面的json。
最后,如果你正在做一个非常复杂的ajax应用程序,我建议使用backbone.js,一开始有点难以理解,但它真的很强大!下面是一个带有注释代码的完整示例。
一个合理的方法是让你的模板由许多组件组成。第一次呈现页面时,将呈现整个模板,并返回整个页面的html。后续更新页面特定部分的Ajax请求只调用特定组件的呈现,并且只返回该组件的html。
大纲组件
HEADER COMPONENT COMPONENT X COMPONENT Y ... FOOTER COMPONENT
在页面请求时,呈现大纲组件及其所有子组件。然后假设COMPONENT X的html需要更新:所以ajax请求是这样的:
GET /MyPage.componentX
返回该组件的HTML。
然而,我绝对建议使用一个体面的web应用程序框架。大多数都是基于组件的,内置了必要的客户端javascript。
1>
看,我看到很多人和网站获取大量的内容,最终被转储到一个div的innerHTML。我觉得,这只是一种浪费。我所做的就是尽可能提出最小和最快的请求,并希望得到同样的回应。您说在完成新的搜索查询后正在更新名称,我更愿意从响应中提取数据,而不是在表或div表单中提取响应!这样的:-
" User1; 501; BSoD | User2; 507; BSoD"
因此,我将使用Javascript在客户端呈现表,而不是获取表代码。我将首先用"|"分割响应,然后用";"分割每个块。这使得运行AJAX命令更容易、更快捷。
还可以选择根据搜索结果存储这些响应(如此处使用的示例),以减少流量使用并获得更好的GUI。
2>
不要使用库,但也不要在你的页面上使用脚本标签。
许多人使用的库大到100 - 450 kB,这对AJAX来说毫无意义。它只会让你的网站变慢,最终HTML页面也会变慢。你必须使用脚本标签与src属性从你的网站添加一个脚本文件,但要确保脚本标签开始和结束像<script src="Whatever source"></script>
更好的网页性能!
3>
验证自己制作的报头,以防止任何非ajax请求导致响应被显示!
- 可以't让我的if语句处理js中的html表单输入
- 如何设置html元素填充的动画
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何编写HTML输入的JS内联
- Dojo不解析自定义小部件的模板html中的小部件声明性
- 使用javascript将动态表从一个html页面打印到另一个html页
- 通过javascript重定向html传递php变量
- 如何使Javascript动态html表及其上的事件
- 在chrome.tabs.onCreated之后加载HTML页面
- 如何在vs2002中调试html页面
- 如何使用javascript或html下载PDF格式的填写表单
- 视频HTML没有'无法在Internet Explorer 11上工作
- HTML表单提交时未执行外部函数
- 如何将输入(type=text)从html表单传递到javascript函数
- 使用angular重定向到html页面
- 分析高度属性时出现意外值{{specs.height}}.index.html
- 在html Select中添加搜索
- 多级HTML表单
- 大量使用ajax的问题-如何在页面上呈现html最初和后来,因为它被修改