zoukankan      html  css  js  c++  java
  • 在不同的页面之间通过查询字符串传递信息

      最近在做项目,遇到了两个页面之间如何传递信息,如何沟通的问题,困扰了我一段时间,今天在浏览其他的网站时,发现了一些网站使用在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;
                 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>
    View Code
    <!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>
    View Code

      希望实现的功能:当点击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可以发现,完成这样的功能并不困难,只要我们主动思考,勤于解决问题就可以了。

      

  • 相关阅读:
    k8s-pv
    k8s ---kubectl 部署时,pull image 报错,拉取不到镜像
    【knowledgebase】不要在一个很大的RDD上调用collect
    【knowledgebase】如何知道partition数
    Spark SQL External Data Sources JDBC官方实现写测试
    Spark SQL External Data Sources JDBC官方实现读测试
    Sqoop2入门之导入关系型数据库数据到HDFS上(sqoop2-1.99.4版本)
    Spark Streaming、Kafka结合Spark JDBC External DataSouces处理案例
    Spark Streaming、HDFS结合Spark JDBC External DataSouces处理案例
    Spark SQL External Data Sources JDBC简易实现
  • 原文地址:https://www.cnblogs.com/zhuzhenwei918/p/6512847.html
Copyright © 2011-2022 走看看