两个html页面之间传递数据的方法
一. 不借助后端,完全由前端完成
1、get方式,url携带参数
实例:
1 | b.html?id=1 |
跳转到b.html后,通过以下的js方法获取get请求的参数:
1 | function get_params(params) { |
在js代码块执行下面代码拿到之前的html通过get请求传递的参数:
1 | var id=get_params("id") |
当然这种传递一些比较小而且不需要考虑数据安全的可以这样子用,在用户登录提交username和password这种就不行了,因为非常不安全,而且get请求数据还是有长度限制的。
2、通过cookie,传递
cookie能够存储少量数据到客户端的磁盘中,特定的网页之间是可以共享cookie中的数据。
先定义几个js方法:
1 | //写cookies |
举个例子,我要给a.html跳转到b.html,并携带一个数据name=“小明”,a.html里js代码块在跳转到b.html之前先执行:
1 | setCookie("name","小明",20);//20意思是cookie有效期为20分钟 |
在b.html的js代码块里执行:
1 | var name=getCookie("name")//先获取值 |
但是我们要传递账号和密码的时候这种也不安全。
3、window.open和window.opener之间传值
window.open可以打开一个新的页面,在新的页面中可以通过window.opener获取父页面的窗口对象,从而可以获取父窗口中的参数。
a.html
1 | <button id="open">打开新的页面</button> |
b.html
1 | <script> |
4、h5技术,window.localStorage存储数据
在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage会有所不同。此方法类似cookie,将数据存在一个公共的地方,实现页面之间传值。但是我不喜欢用这个,因为localStorage生命周期是永久,这意味着除非用户显示在浏览器提供的UI上清除localStorage信息,否则这些信息将永远存在。而且它仅在客户端(即浏览器)中保存,不参与和服务器的通信
保存数据语法:
1 | localStorage.setItem("key", "value"); |
读取数据语法:
1 | var lastname = localStorage.getItem("key"); |
删除数据语法:
1 | localStorage.removeItem("key"); |
*5、h5技术,window.sessionStorage存储数据*
相比localStorage,我更喜欢sessionStorage,因为sessionStorage仅在当前会话下有效,关闭页面或浏览器后被清除。存放数据大小为一般为5MB,而且它仅在客户端(即浏览器)中保存,不参与和服务器的通信。源生接口可以接受,亦可再次封装来对Object和Array有更好的支持。我一般用它来实现两html之间的json数据传递,当然前提是这个json数据不是什么要保密的数据(账号和密码这种不推荐这种方法存储)
打个比方,就说我a.html请求接口获取过一次数据,但是发现跳转到b.html,我也需要再请求一次接口拿到a之前请求的数据我才能执行下面的操作,是不是就有点重复,当然,这里的数据肯定不是像账号和密码那种非常需要安全警惕的,这时候就可以考虑用sessionStorage。举个例子,在a.html跳转到b.
html是执行以下js代码:
1 | var json;//你的json数据 |
在b.html的js代码块里执行:
1 | var json= JSON.parse(sessionStorage.getItem("allJson"));//从sessionStorage里取出json数据 |
二. 借助后端,由前端的Cookie结合后端的session完成
这种情况一般用来记住登录状态,一般用来跳转界面之后不暴露用户和密码都能识别你是哪个用户。一般的思路是:服务器端session保留之前提交的用户对象,并给客户端的Cookie塞一个key,然后客户端每次操作后端都通过这个前端Cookie里提交的key从服务器的session里取出对应的User,然后执行操作,很多时候为了避免Cookie被窃取,每次操作的时候都会更改前端Cookie的key值,并将User对象存到新的session里,当然新的session的key对应的前端新更新的key,并删除之前无效的key对应的session。具体可以看这位博主的文章,就不多介绍了。