利用session存值,跳转刷新页面后回显

  • Post author:
  • Post category:其他

提交页面,中途选择选项时跳转了页面,返回提交页面时刷新了,以前的数据消失,解决方法:利用session存储数据,返回时再取出回显

思路:一、点击跳转时利用session把数据存起来

二、跳转页面再存session回提交页(可以略过,我的是因为新页面需要传数据回来,才在新页面也存了一个session)

三、返回页面,sessionStorage.getItem(key)获取之前存储的数据再放回页面中

实现:
一、点击跳转时利用session把数据存起来
1.先保存需要存储的数据

var model = {};//var一个空对象,里面用来存所有数据
model.Pics = []//对象里的数组

2.存值
我的是在跳转的方法里获取值,跳转时存session

 $(".xzzc_select").click(function () {
            window.location.href = "/FeedBack/ChoosePosition";
            //session
            model.ComplainLables = $('.ts-item-w').children(".active").text()//获取的所需的数据
            model.CommentType = $('#commentType').children(".active").attr('value')
            //存值,session只能存字符串,需要转换
            sessionStorage.setItem("key", JSON.stringify(model))
        })

二、跳转页面再存跳转页面的session回提交页
这是跳转的页面

 function sureFunc() {
        //获取选中的
        var orgId = $("input:radio:checked").attr("orgId");
        //存session 需要返回给提交页面的数据
       	sessionStorage.setItem("orgId", orgId);
        window.history.go(-1);
    }

三、返回页面,获取存储的数据再放回页面中
跳转回来之后,在提交的页面
param和model需要注意,param是传给后台的值,model是存储的值。

 $(function () {
        //获取选项页面穿过来的session
        var cpId = sessionStorage.getItem("orgId");
        if (cpId) { param.MPlatId = cpId }//param.MPlatId是需要传给后台的
        //获取之前存的session,存的时候转换过,现在用JSON.parse()方法转换回来,否则打印就时[object object]
        var subModel = JSON.parse(sessionStorage.getItem("key"));
        if (subModel) {//如果有值
            console.log(subModel);
            //这里重新绑定选中的数据到界面,
            //如果model.ComplainLable有值,就放回
            if (subModel.ComplainLables) { $('.xzzc_select .val').text(subModel.ComplainLables)}
            //
            //图片放回例子
            if (subModel.Pics) {
            //param是提交所需要的数据,重新回来之后为空了,重新赋值给param
                param.Pics = subModel.Pics
                for (var a = 0; a < subModel.Pics.length; a++) {
                    var Nhtml = "";
                    Nhtml += '<span class="fileBox pull-left" name="fileBox" style="margin-right:10px;">';
                    //这里给x删除,另外添加了一个自定义属性url,和上传的图片的url一样,为了删除时同时删除model.Pics里面的
                    Nhtml += '<img class="filedel" οnclick="fileRemove(this)" src="/images/img_closed2_nor.png" url="'%20+ subModel.Pics[a] + '">';
                    Nhtml += '<img src="'%20+ subModel.Pics[a] + '" class="fileimg" />';
                    Nhtml += '</span>';
                    $(".dimg-wrap").prepend(Nhtml);
                }
            }
     	}

图片删除功能:因为是上传成功一张,就push一张进param.Pics,如果删除不仅要从页面删除图片,也要从param.Pics的数组里删除,有点麻烦

  • 注意 我的model.Pics,直接是param.Pics=model.Pics这样赋值的
//小x删除的点击事件
    function fileRemove(obj) {
        var url = $(obj).attr("url");//获取点击删除的url属性值
        var deleteIndex = getDeleteIndex(url);//传参调用方法,返回所要删除的下标
        debugger;
        if (deleteIndex > -1) {
        //这是为什么删的是param里面的值,因为存图片的时候 model的值我是直接param.Pics=model.Pics的
        //删了param.Pics里面的值,model.Pics也会被删,结果一样的
            param.Pics.splice(deleteIndex, 1)//删除
        }
        $(obj).parents("span.fileBox[name=fileBox]").remove();//从页面删除图片
    }
    function getDeleteIndex(url) {
        var index = -1;
        param.Pics.forEach(function (v, cindex) {
        //v是图片url,cindex是下标
        //如果点击删除的url和param.Pics里某个图片的url一样
            if (v == url) {
                index = cindex;
            }
        });
        return index;//返回下标
    }

大概就是这样。有点乱
可以先写不需要跳转刷新的情况下数据提交,提交成功后 再来写跳转刷新后重新获取值的提交
提交传数据给后台 param和model之间:
param的有些值是在别的方法里赋值的,刷新之后,这个值就没有了,提交的这个值就是underfind,
那就可以var subModel = JSON.parse(sessionStorage.getItem("key"));
if (subModel){ param.Pics = subModel.Pics }在有session的情况下,把session存的值给param.


版权声明:本文为Web_Notes原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。