页面中途跳转后,剩余的代码还会执行么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了页面中途跳转后,剩余的代码还会执行么?相关的知识,希望对你有一定的参考价值。

大家好,我是新手。
比如一个页面,1000行C#代码,第20行代码是在特定情况下的Response.Redirect(……);
浏览者触发这个Response.Redirect(……);跳转到其他页面后,原页面剩下980行代码还会执行么(尽管已经与浏览者无关了)?

还有Server.Transfer(……);的情况呢?是和Response.Redirect(……);一样还是相反?

那么,如果不会执行剩余代码的话,有必要在每个跳转之前加个db.close();之类的数据库关闭代码(比如在datareader大量使用下)吗?

Redirect或Transfer都会不执行此后的代码。

使用using语句块,一旦离开了这个using,就会执行dispose,dispose和Close是一样的,都是释放资源,在.NET中,提倡使用dispose,Close之所保留是因为C/C++中文件操作都是Close释放,为了某些C/C++程序员迁移到C#。
对于你说那个DataReader,它是基于连接的,如果db.Close的话,它就不工作了,注意在获取DataReader对象时候一般用那个ExecuteDataReader,这个方法是可以传入参数的:就是指定在DataReader关闭时候也关联的关闭该Connection。

"Response.Write("<script type='text/javascript>alert('avdfasdfsadf');window.location.href='index.aspx'</script>"); "
这样的方式会破坏页面的css,还会造成白屏。
参考技术A 恩,不会再执行了
建议不要用response. Redirect()跳转页面
这样就不会执行下面的类似提示信息相关代码了
不过可以用一种方法把两个语句合起来写,就能达到这个要求
Response.Write("<script type='text/javascript>alert('avdfasdfsadf');window.location.href='index.aspx'</script>");
参考技术B 刚才看错了,asp代码,会被执行。

页面刷新跳转后,导航栏高亮显示跳转前的点击位置

需求:比如有一个二级或三四级的菜单栏,页面不跳转时实现高亮显示是很容易的,网上有很多这样的素材。但是页面一跳转,新页面可就记不住你在上一个页面点击的位置了,也就不可能高亮显示。并且很多时候,跳转后的页面菜单栏是后台动态生成的,也就是菜单栏栏目不固定,那么就不可能给菜单栏高亮效果写死。不知道这个事利用前后台交互去做会不会容易点,但是现在是要用纯前台实现。

 

实现原理一:这时候必须找个地方给它把点击的位置存起来,等页面跳转后,从那个地方把标记取出来,再给导航相应的位置做高亮处理就好了。

 

方法1:利用 H5 的 localStorage ,但是IE67不兼容,IE8还存在问题,项目要求兼容性的,所以干脆没试过这方法。但是不要求兼容性的可以尝试一下,我还没来得及……

 

方法2:隐藏变量的方法应该也可行吧,但是页面需要异步处理,就是说要把隐藏变量放到不被刷新的位置,然额~我们是页面全刷新,这方法用不到。

 

方法3:利用 cookie 存储,但是 cookie 有安全性问题,项目里不让用。虽然不让用,但是我也贴出来吧。这是3个封装方法,可以直接调用的:

function getCookie(key){
    var arr1 = document.cookie.split(‘; ‘);
    for(var i=0;i<arr1.length;i++){
        var arr2 = arr1[i].split(‘=‘);
        if(arr2[0]==key){
            return decodeURI(arr2[1]);
        }
    }
}

function setCookie(key,value,t){
    var oDate = new Date();
    oDate.setDate(oDate.getDate() + t);
    document.cookie = key + ‘=‘ + value + ‘;expires=‘ + oDate.toGMTString();
}

function removeCookie(key){
    setCookie(key,‘‘,-1);
}

点击的时候调用 setCookie(),标记位置。然后页面跳转初始化的时候调用 getCookie(),取出标记,高亮显示菜单。

但是测试的时候有个问题,就是IE下 setCookie()方法放进去的值,页面跳转时就被清掉了,我还没来得及查原因。火狐下测试没问题,谷歌本地测不了。

 

方法4:利用 url 传参,我用的是这个方法,跳转后用 getUrlParam() 封装方法把参数取出来。

window.onload = function(){
//获取url中的参数
    function getUrlParam(name) {
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
        var r = window.location.search.substr(1).match(reg);  //匹配目标参数
        if (r != null) return unescape(r[2]); return null; //返回参数值
    }

    var lv = getUrlParam(‘lv‘);
    var aId = getUrlParam(‘aId‘);
}

遇到的问题:如果是外链接的话,外链接本身就有参数,再加上我这一堆参数,跳转后就会出现问题。我是在初始化时循环导航栏的链接,就不给外链加标记参数了,就解决了。

我看到网上说,这种方法的缺点是在浏览器缓冲阶段,会看不到高亮。等页面加载完或导航栏加载完一段时间,才会变成高亮,有一个时间延迟。

 

实现原理二:

方法5:页面跳转初始化时就把 window.location.href 与导航栏的链接地址去做匹配,匹配上的就加高亮显示。我准备接下来写四级菜单的时候用一下这个方法,还不知道会不会出现问题,有问题再来补充……

 

以上是关于页面中途跳转后,剩余的代码还会执行么?的主要内容,如果未能解决你的问题,请参考以下文章

用js脚本点击页面button,页面跳转后,如何继续执行下面js脚本?

iframe跳转后再刷新又返回原页面了

EasyUI页面跳转后传值出现乱码

Java web开发中页面跳转小技巧——跳转后新页面在新窗口打开

jsp页面跳转后,如何获取前面一个页面的一个参数值

如果不浏览页面js定时器还会执行么?