2020/1/18 关于使用hash值不能实现页面请求数量减少的问题

如图:

在开发一个p2p网站的过程中遇到这样的问题:

即使用二级路由加载页面(目的是为了不让页面刷新)

这里文件的获取同样是通过ajax请求实现的

问题在于每一次点击二级路由加载页面时

浏览器都会重新加载一次一级页面,personal.html,如图:

源代码如下:

于是我尝试做一个改进,

通过hash的值进行判断,当前页面是否为personal页面:

如果是:那么不用加载personal.html,直接加载二级页面;如果不是:那就加载一级页面,再加载其对应的二级页面;

改进如下:

我发现,因为一级页面本身就是通过判断hash值来决定加载的,而一开始如果不在个人中心页,那么就必须先加载"#personal"页面,而如果在个人中心页面,那就说明hash值"#personal"是被加载过的,但又因为二级路由需要放在一级路由的回调函数中(为了消除异步,实现同步),所以可以认为,当我使用hash来判断页面的加载情况时,一二级页面是绑定在一起的,即只要想加载二级页面,就必须先加载一级页面,所以无法通过判断一级hash值决定二级页面是否加载。

于是我们换个思路,直接通过判断当前主页面内一级页面中必然含有的dom结构的存在情况来判断是否再次加载一级页面,先找到personal的dom节点:

再在index.js里修改:

这样就可以实现在personal页面中点击二级页面时,不会重复加载personal页面了,图中圈住的地方要注意,判断一个对象是否存在,不能直接写:,因为在jq中$符号包住的东西,不管是什么,都会被解析为一个对象,里面有一些固有属性名和值,所以这样判断会永远返回true:

所以我们通过$对象中的length属性来判断是否存在该节点:

如果在页面中:那么length就存在

如果没在:那么length就不存在:

其实这里之前还遇到一个问题,原本二级路由加载的代码我是这样写的:

运行出来发现二级页面显示不出来,原因是:load方法是异步执行的

百度了一下:

在jQuery中对Ajax进行了封装,异步请求的方法共分为三层:

最底层:$.ajax();中间层:$.get()、$.post()、load();最高层为:$.getScript()、$.getJSON()。

所以load里面有个回调函数可以写,就是我们要写的二级路由的加载;

发布了3 篇原创文章 · 获赞 3 · 访问量 211

猜你喜欢

转载自blog.csdn.net/weixin_42619900/article/details/104027463
今日推荐