ajax+div=iframe应用

设计初衷目标

在系统首页,由于系统的首页并不是固定不变的,通常会根据当前用户的岗位(角色)来动态加在需要的选项卡,所以使用硬编码的方式会带来非常复杂的开发成本。为了简化,所以系统使用使用拖动组合的方式来管理选项卡。

涉及的元素

l可拖动的布局,比如:<div class=’row’><div class=’col-sm-12’></div></div>

l可拖动的选项卡,比如:公告选项卡,跟进订单选项卡等

l桌面,已经配置好的桌面列表

前端技术

布局:由于前段的实现比较麻烦,所以这里面直接借用boostrap layoutit的设计

选项卡:ajax + div=iframe

开发者目标

1.开发简单,独立

2.不需要了解整个选项卡过多的设计,做到不入侵,不污染

3.测试简单


选项卡的演变

1.借用ebos公司的设计方式(超哥的顾问公司),使用art-template的方式来管理每个选项卡,所以在配置选项卡时,需要写javascript模板,配置参数,配置service

2.使用iframe来管理每个选项卡

3.使用ajax+div的方式来管理每个选项卡

这三种方式,是在开发过程中,不断调整总结的一个过程,下面给出三者的优缺点

Js模板

Iframe

Ajax+div

优点

1.加载选项卡速度快

2.适合简单的选项卡开发

优点

1.开发简单

2.每个选项卡都独立

3.事件绑定简单

4.测试简单

优点

1.开发简单

2.每个选项卡都独立

3.速度有js模板方式几乎一样

缺点

1.管理方式复杂

2.开发成本高,每个人都需要学习整个选项卡的架构以及实现相应的service接口

3.无法给每个选项卡绑定事件,对javascript事件的开发不方便

4.测试麻烦

缺点

1速度非常慢

2.每个浏览器一般有规定,同时只能加在Niframe

缺点

1.需要js变量提前声明

管理界面

管理界面

管理界面


如何使用ajax+div开发选项卡

Ajax+div开发选项卡,需要了解下htmldom操作,下面我们看看下面的代码

<!DOCTYPE html>

<html>

<head>

<title>ajax+div</title>

<script type="text/javascript" src='jquery-2.1.1.min.js'></script>

<Meta charset="utf-8">

<script type="text/javascript">

$(function(){

var html = "<h1>这是ajax+div的测试</h1>";

html += "<script type='text/javascript'>alert('hello to ajax+div');<\/script>";

$('body').append(html);

});

</script>

</head>

<body>

</body>

</html>

运行结果图片

从例子中,我们可以发现,通过$('body').append(html)可以将html动态的加入到指定的div中,并且<script>标签中的js代码得到了正确的执行。

有了如上的基础,我们就可以将原来的iframe修改ajax+div了。那么如何修改呢?思想依然和例子一样,就是在后台将原来iframe界面的内容渲染好,然后通过ajax请求,将渲染好的html直接返回到前端,然后append到指定的div中即可。

由于原来的iframe方式都是界面跳转,所以这时候添加一个@ResponseBody标签,然后使用Freemarker手动渲染界面(默认我们返回ModelAndView,由Spring帮我们渲染),然后将渲染好的html推送回去即可。

由于现在选项卡入口太多,所以系统进一步添加一个DesktopTabController,将所有的选项卡移动接口移动到该类(方便定位于后期的维护),然后直接给该Controller添加@ResponseBody即可。

前端的修改更加简单,直接删除head,html标签,并且删除多余的include标签,只需要引入该模块的script标签即可。但是需要注意的一点就是,变量提前声明,因为append进去的方式,会立即执行script标签中的js代码修改如下图所示

界面修改

引入的js修改下变量声明的位置

总结

选型技术时,需要同时考虑:开发者的工作,代码执行效率,测试等。简单的只考虑效率不行,只考虑开发者也不行...整个选项卡的演变过程,基本上也是围绕着这三个目标在不断的改进...

相关文章

JS原生Ajax操作(XMLHttpRequest) GET请求 POST请求 兼容性问题 利用iframe模拟ajax 实现表单提交的返回...
AJAX 每日更新前端基础,如果觉得不错,点个star吧 &#128515; https://github.com/WindrunnerMax/E...
踩坑Axios提交form表单几种格式 前后端分离的开发前后端, 前端使用的vue,后端的安全模块使用的SpringSe...
很早就听闻ajax的名声,但是却一直不知道怎么用,今天自己捣鼓了一下,竟然会用了,哈哈哈哈。 为了防止...
需要在服务器上进行哈 jquery的ajax方法: // jquery请求 $.ajax({ url: &quot;./server/slider.js...
Ajax函数封装ajax.js // Get / Post // 参数 get post // 是否异步 // 如何处理响应数据 // URL // var...