在不同的页面之间通过查询字符串传递信息

  最近在做项目,遇到了两个页面之间如何传递信息,如何沟通的问题,困扰了我一段时间,今天在浏览其他的网站时,发现了一些网站使用在url后面以传递字符串的形式来传递信息,觉得很有意思,所以这里希望总结一下,并运用在项目中。

第一步:问题分析

  

  在首页有这样一部分内容,当点击三个图片(或对应的文字)时,都会跳转到相同的页面,但是,我希望点击不同的模块, 在进入下一个页面时能显示不同的信息。

  比如,我点击了中间的“企业办事”,我希望最终的效果如下所示:

  即显示企业办事的相关内容。

  问题: 后面的这个页面怎么才能知道用户在前面的页面点击了什么呢?

第二步: 使用demo进行测试

  在同一个文件夹下建立两个文件: rememberState1.html 和 rememberState2.html 。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>rememberState1</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        a {
            display: inline-block;
            width: 100px;
            height: 50px;
            line-height: 50px;
            text-align: center;
            border: thin solid blue;
            text-decoration: none;
        }
    </style>
</head>
<body>
    <a href="rememberState2.html" class="first">链接1</a>
    <a href="rememberState2.html" class="second">链接2</a>
    <a href="rememberState2.html" class="third">链接3</a>
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>rememberState2</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        div {
            padding: 10px 15px;
            border: thin solid blue;
            margin:10px 20px 0 10px;
        }
    </style>
</head>
<body>
    <div class="firstDiv">链接1被点击时显示</div>
    <div class="secondDiv">链接2被点击时显示</div>
    <div class="thirdDiv">链接3被点击时显示</div>
</body>
</html>

  希望实现的功能:当点击rememberState1.html中按钮时, rememberState2.html相应的部分显示。

  

  问题查询:请教一下关于URL中的查询字符串  在segmentfault上我们可以看到类似的问题。

  答案: 查询字符串的形式例如: https://www.baidu.com/?type=personal&name=zzw  其中?type=personal&name=zzw就是查询字符串, 在两个键值对之间我们需要使用&链接。将此url输入到浏览器地址栏中我们可以看到进入的仍是百度的界面。 查询字符串就是类似与ajax中get方法的查询字符串,可以向后台发送数据,至于怎么处理就与前端无关了。 但是我们可以利用这样的特点,在相应的页面通过js获得这个查询字符串以利用之。

  问题解决思路: 当点击不同的按钮时,虽然我们都使其指向相同的页面,但是我们可以添加不同的查询字符串,并在后面的页面获取相应的查询字符串然后利用之。

  设置如下所示:

    <a href="rememberState2.html?type=1" class="first">链接1</a>
    <a href="rememberState2.html?type=2" class="second">链接2</a>
    <a href="rememberState2.html?type=3" class="third">链接3</a>

  当我们点击不同的按钮时,可以发现传入的url是不同的(查询字符串不同)。

  

  ok! 第一步也是非常重要的一步工作完成了,接下来就是在第二个页面如何获取这些有用的数据啦!

  

   思路: 我们可以通过window.location.search属性得到当前页面的查询字符串,然后再利用处理字符串的方法得到其中不同之处即可(1 or 2 or 3)。

     即window.location.search.replace("?type=", "");即可得到上一个页面点击的是第一个a(1) 、第二个a(2) 还是第三个a(3) 。

  然后再根据不同的值显示或隐藏响应的内容,默认是第一个显示。那么 rememberState2.html的代码可以如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>rememberState2</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        div {
            padding: 10px 15px;
            border: thin solid blue;
            margin:10px 20px 0 10px;
            display: none;
        }
        .show {
            display: block;
        }
    </style>
</head>
<body>
    <div class="firstDiv">链接1被点击时显示</div>
    <div class="secondDiv">链接2被点击时显示</div>
    <div class="thirdDiv">链接3被点击时显示</div>
    <script>

      var typeNumber = window.location.search.replace("?type=", "");
      if (typeNumber === "" || typeNumber === "1") {
        document.querySelector(".firstDiv").className += " show";
      } else if (typeNumber === "2") {
        document.querySelector(".secondDiv").className += " show";
      } else if (typeNumber === "3") {
        document.querySelector(".thirdDiv").className += " show";
      }

    </script>
</body>
</html>

  注:因为typeNumber是string,所以上面的命名使用typeString更为合适!  

最终效果如下所示:

  第三步: 将demo中使用的方法应用到项目中去

   我所举得例子就是和项目中的使用场景非常相似, 通过上面demo的练习,我很快就可以将上述方法运用到项目中去, 最终的效果如下所示:

 

 

  第四步:总结

  通过上面的demo可以发现,完成这样的功能并不困难,只要我们主动思考,勤于解决问题就可以了。

  

时间: 2024-12-18 12:09:18

在不同的页面之间通过查询字符串传递信息的相关文章

aspx页面状态管理(查询字符串Request与Application)

1,Request:可以方便的将信息从一个页面传递到另一个页面,通过url传递,不安全,数据量小,只能通过http-get提交的才可以 2,Application对象:()本质上是Hash表)所有访问此应用程序的客户都能看到Application对象的值,主要用于储存所有用户公共的信息,如果木有使用程序强制释放,则Application对象会存在于整个应用程序的生命周期哦 asp.net的应用程序池中保存数个(Application)应用程序实例,每一次请求都会从池中取出一个实例来处理请求,在请

MVC 解决方案: 页面在 IE 浏览器发送中文查询字符串时乱码

今天参照 MvcMusicStore 的教程开始学习 MVC. 在 Browse 页面中我尝试以中文发送查询字符串, 结果得到乱码. 遇到问题我就查资料, 结果查到很多方法, 最主流的方法是往 Web.Config 里加入 <globalization requestEncoding="gbk" responseEncoding="gbk" culture="zh-CN" fileEncoding="gbk" />

页面传值之URL查询字符串

何谓页面传值,顾名思义,就是要进行页面跳转时,要将本页面的一些值带到要跳转的页面去.页面传值的方法有以下几种: 1.使用QueryString 查询字符串.通过地址栏的参数传值 2.使用cookie.将值保存到cookie中,之后再从cookie中读取相对应的值. 3.使用session. 4.使用Server.Transfer. 5.使用Application. 6.使用Cache. 7.使用HttpContext的Item属性. 8.使用文件 以上列举的是ASP.NET的页面传值的方法,常用

【JavsScript】父子页面之间跨域通信的方法

由于同源策略的限制,JavaScript跨域的问题,一直是一个比较棘手的问题,为了解决页面之间的跨域通信,大家煞费苦心,研究了各种跨域方案.之前也有小网同学分享过一篇“跨域,不再纠结” 开始照着尝试时还是有些不够明白的地方,深入了解之后,这里给大家补充一点更具体的做法. 先来看看哪些情况下才存在跨域的问题: 其中编号6.7两种情况同属于主域名相同的情况,可以设置domain来解决问题,今天就不讨论这种情况了. 对于其他跨域通信的问题,我想又可以分成两类: 其一(第一种情况)是a.com下面的a.

【JavaScript】父子页面之间跨域通信的方法

由于同源策略的限制,JavaScript跨域的问题,一直是一个比较棘手的问题,为了解决页面之间的跨域通信,大家煞费苦心,研究了各种跨域方案.之前也有小网同学分享过一篇“跨域,不再纠结” 开始照着尝试时还是有些不够明白的地方,深入了解之后,这里给大家补充一点更具体的做法. 先来看看哪些情况下才存在跨域的问题: 其中编号6.7两种情况同属于主域名相同的情况,可以设置domain来解决问题,今天就不讨论这种情况了. 对于其他跨域通信的问题,我想又可以分成两类: 其一(第一种情况)是a.com下面的a.

ASP.NET 页面之间传值的几种方式

原文:http://www.cnblogs.com/wangjiming/archive/2017/01/18/6275854.html#!comments 详解每种方法 一.Request.QueryString 核心代码: protected void getQueryString_Click(object sender, EventArgs e) { string QueStr = Request.QueryString["name"]; Response.Write(QueSt

父子页面之间跨域通信的方法

作者: lyndon  来源: 腾讯大讲堂  发布时间: 2014-08-08 08:59  阅读: 5025 次  推荐: 20   原文链接   [收藏] 由于同源策略的限制,JavaScript跨域的问题,一直是一个比较棘手的问题,为了解决页面之间的跨域通信,大家煞费苦心,研究了各种跨域方案.之前也有小网同学分享过一篇“跨域,不再纠结” 开始照着尝试时还是有些不够明白的地方,深入了解之后,这里给大家补充一点更具体的做法. 先来看看哪些情况下才存在跨域的问题: 其中编号6.7两种情况同属于主

笔记(三) ASP.NET 页面之间传值的几种方式

ASP.NET 页面之间传递值得方式大致可以分为如下几种:Request.QueryString["name"],Request.Form("name"),Session,Cookie,Cache,Application,Server.Transfer,Database, HttpContext的Item属性,Files,DataBase等等. 一.Request.QueryString 核心代码: protected void getQueryString_Cli

[转]父子页面之间跨域通信的方法

父子页面之间跨域通信的方法 2014/08/08 · Web前端 由于同源策略的限制,JavaScript跨域的问题,一直是一个比较棘手的问题,为了解决页面之间的跨域通信,大家煞费苦心,研究了各种跨域方案.之前也有小网同学分享过一篇“跨域,不再纠结” 开始照着尝试时还是有些不够明白的地方,深入了解之后,这里给大家补充一点更具体的做法. 先来看看哪些情况下才存在跨域的问题: 编号 URL 说明 是否允许通信 1 http://www.a.com/a.js http://www.a.com/b.js