html文件实现动态获取资源,html页面不通过后台逻辑直接动态获取js文件

最近有个任务是要在页面上读取服务器上实现预存好的json文本数据,然后通过jqplot在页面上将json数据显示成图表;而且要有查询功能,服务器上的json数据,根据时间顺序分割成一个个的小文件,根据时间即可获取唯一的json文件……

一开始我马上就想到前台通过xmlhttprequest想后台服务器发出异步请求,然后后台根据请求读取对应的json文件,然后解析成文件流,再往页面写……这样子实现起来并不难,但是头说,这样太笨重了,一个小小的获取服务器本地的json数据,根本不需要后台逻辑加传输的,全部放到前台去做!

这就意味着我失去了后台这个强大有力的支持,单单靠js来获取json文件数据,一点头绪都没有,因为js没有什么文件操作的对象和函数(IE下似乎有,但是不通用……),很伤脑筋,后来想到一个解决方案:

我们的json数据是存放在一个个的js文件中的,于是我想到了动态加载script元素,使用document.createElement("script");方法创建script元素,然后加到head元素中去,而且我们的json数据都是规范过的,有对应唯一约定好的变量名,这样只要加载成功就可以动态地通过拼接变量名得到里面存储的json数据了,最后,可以成功读取json数据了,这中间也遇到的很多问题,但是有个比较致命的问题让我放弃了这种方法!

这个问题在IE8中是没有的,而在chrome中就比较郁闷,因为script的加载,并不是append语句一执行,js文件里的脚本就马上可以使用,他还有一个加载的过程,而且是异步的,不等它加载完成,后面的代码就已经开始执行了:

var js=document.createElement("script");

js.type="text/javascript";

js.src="/js.js";

var head=document.getElementByTagName("head")[0];

head.append(js);

//假如jsonData就是加载的js文件中json的变量名

alert(jsonData);这样的执行下来,alert这一句就会报错了,说是变量名没有定义,但是使用chrome审查元素的功能看的时候,发现我的script元素确实加进去了,而且稍后,我再去alert(jsonData)的时候,就可以显示出object了,这样子问题就很大了,我哪里知道它什么时候加载完成啊,后来也有解决方:

var js=document.createElement("script");

js.type="text/javascript";

js.src="/js.js";

var head=document.getElementByTagName("head")[0];

head.append(js);

//加这一句,写上回调函数:

js.οnlοad=function()

{

//假如jsonData就是加载的js文件中json的变量名

alert(jsonData);

}

这样的话,就会alert说你的jsonData是object了,但是这样仍然有问题,因为我要加载的js文件不止一个,而且有些用户要求查询的数据是不存在的,也就是说有的src路径是不存在的,而且,我是需要等到所有的js文件获取好了之后,将里面的所有json数据读取出来并且显示,或者说,每加载一个js文件就读取一次json数据就将这个数据显示出来,一直到结束,但是因为有些限制,数据无法一个一个显示,只能一起显示,所以我必须知道这些js文件什么时候加载完成,或者说告诉我哪一个js文件是最后一个加载结束……显然这里有很大的困难,至少我现在没有想到什么好的办法来解决这个问题,只能放弃这种方案。

最后还是回到了服务器上,但是,除了服务器本身之外并没有任何后台实现,服务器纯粹是作为一个容器而已,方案就是使用xmlhttprequest通过url地址同步获取js文件!哈哈,以为这个可以让他同步获取而不是异步,这样我就好控制了,剩下的问题就是在前端拼接出文件路径和文件名来!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源说明】 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 1.1 登陆模块: * 数据库中查询用户,所以存储用户用session.setAttribute。验证用户用session.getAttribute。 * 一般进行加密存储,方式是用token(用户令牌)进行用户状态保持和验证. * 登录验证流程: ![a525034e1b26357865938eb8e1356c1](https://user-images.githubusercontent.com/52690597/155254453-c1ab8d56-a9fc-4242-97cd-e97a77670947.jpg) * 建数据库表:id,用户名,md5密码,token,是否删除,添加时间 * Dao:在配置文件中的User mapper中配置具体方法实现,原始dao层只有接口. * 方法:通过查询用户名,密码和token值返回用户对象. * 业务层(service):作为User对象获取dao层数据,判断是否需要更新token,然后返回user对象. * 控制层(controller):用StringUtils工具类判断输入的用户名和密码是否为空,再调用业务层返回user对象,最后再返回result类。 * Result类单独说:返回的结果不止包含数据,还有message告诉成功还是失败,一个code200,404来告诉具体状态,用一个const类存不同状态对应的code值,用resultgenerator来按照controller的逻辑修改result的参数(通过setter), 最后result的值和信息通过@RequestMapping指定的路径在访问这个路径时调用login方法然后显示结果. * 登录状态保持:后端实现token值是否有效,因为大部分接口都需要验证登陆,所以进行方法抽取,用aop注解切面来返回用户信息(需要自定义注解:1.@interface + 注解名,2. 元注解:修饰注解的注解,@Target:注解用在哪种java元素上, @Retention:注解的生命周期,@Documented),再用自定义方法参数解析器HandlerMethodArgumentResolver取出request header中的user,调用service层方法比较token,返回user对象。 最后在spring-mvc配置文件中配置参数解析器,直接在controller类中需要用这个注解的方法or参数上添加注解就可以自动验证token。 1.2 分页功能 * 后端按照前端的需求将分页所需数据查询出来。后端只需要提供总页数,必不可少的两个参数1 需要的页码 2 每页条数 * 数据交互流程: 1. 前端将页码和条数两个参数通过 HTTP 请求传输给后端; 2. 后端获取到这两个参数后进行参数验证,查询后将当前页的所有数据实体和数据总量封装; 3. 后端将封装数据返回给前端; 4. 前端获取到数据和数据量后分别对当前页数据进行渲染和展示,同时完成分页信息区的计算和展示。 之后定义后端数据的响应格式,在Result里,然后定义分页结果集的数据格式。 * DAO层:实现分页功能都需要在对应实体的DAO Mapper的xml文件中添加查询总数目和查询列表的sql语句(其中要包含分页的两个参数:start页数和limit每页条数)。 * Controller层:获得前端的param,验证页数和条数是否为空,最后调用业务层将PageUtil(页数类,用于获取前端发送过来的map数据中的页数和条数)对象传递过去。 * Service层:调用DAO层两个方法,返回PageResult类也就是结果集,其实最后进入了result类和code与message一起到前端。 2.1 图片管理模块:主要使用mvc的multipartResolver工具类实现文件上传。如果接受到了文件上传请求,dispatcher调用resolveMultipart方法装饰请求HttpServletRequest并返回multiHttpServletRequest类型(包含文件对象)。 具体流程: 1. 首先判断请求对象request,然后对请求头的contentType进行判断。 2. 当请求不为空&&contentType不为空&&contentType值以multipart开头,

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值