文档章节

在URL中#(井号)后面传递参数如何实现

osc首席说得对但实现不了
 osc首席说得对但实现不了
发布于 2014/10/23 11:59
字数 400
阅读 10030
收藏 10

在网上浏览时看到一些网站的URL使用#号后面传递一些字符作为参数,因为URL中#(井号)后的内容是不会被加入HTTP请求的,于是研究了一下,分享给大家。

URL:http://xxx.com/index.php?id=1#01234abcd

可以看出此处#后面的字符串作为一个标识使用,那么PHP(以PHP为例)端如何获取这个值呢?

其实PHP是不能直接获取这个值的!但是我们可以通过变通的方法来实现。常用的是通过JS把这个值设置到cookie里面,然后PHP就能访问这个cookie的数据了:

//Javascript 代码
var ss = window.location.href.split("#");

document.cookies = "ss="+ss[1];

然后在PHP中就可以使用 $_COOKIE['ss'] 取得这个值了。

<script language="javascript">
    var ss =location.href.split("#");
    document.cookie='ss='+ss[1];
    if (ss[1] != "<?php echo $_COOKIE['ss']; ?>") {
        //判断 cookie 是不是最新值,不是则重新载入页面
        window.location.reload();
    }
</script> 
<?php echo $_COOKIE['ss']; ?>

这个方式有个缺点,就是设置cookie后需要重新载入,PHP端才会生效,对网速慢的用户体验犹为不佳。


另一个常用的场景是通过 JS 获取参数,根据值来从PHP端以 AJAX 方式获取数据显示出来。

如 URL:http://xxx.com/#news

//location.hash 可获取URL里的#号和后面的部分
var mod = location.hash;
if(mod == "#news"){
    //AJAX获取和处理最新数据
    $.ajax(......);
}
else if(mod == "#hots"){
    //AJAX获取和处理热门数据
    $.ajax(......);
}

第二种方式比较适合常见的AJAX应用,编程讲究的就是灵活多变。




© 著作权归作者所有

osc首席说得对但实现不了
粉丝 11
博文 31
码字总数 9713
作品 0
深圳
高级程序员
私信 提问
加载中

评论(1)

台俊峰
台俊峰
支持下,js通过location.hash来获取这个比较常用
javascript获取当前页面的URL信息

以前在做网站的时候,经常会遇到当前页的分类高亮显示,以便让用户了解当前处于哪个页面。之前一直是在每个不同页面写方法。工程量大,也不便于修改。一直在想有什么简便的方法实现。后来在网...

freedonn
2014/12/30
0
2
如何让搜索引擎抓取AJAX内容?

越来越多的网站,开始采用"单页面结构"(Single-page application)。 整个网站只有一张网页,采用Ajax技术,根据用户的输入,加载不同的内容。 这种做法的好处是用户体验好、节省流量,缺点...

阮一峰
2013/07/16
0
0
Js获取当前页面URL的一些属性_已迁移

设置或获取对象指定的文件名或路径:window.location.pathname 设置或获取整个 URL 为字符串:window.location.href 设置或获取与 URL 关联的端口号码:window.location.port 设置或获取 UR...

辣条拌鱼翅
2015/01/01
0
0
如何用js得到当前页面的url信息方法

如何用js得到当前页面的url信息方法(JS获取当前网址信息) 1,设置或获取对象指定的文件名或路径。 alert(window.location.pathname) 2,设置或获取整个 URL 为字符串。 alert(window.locatio...

你假松假精
2016/10/11
4
0
js如何准确获取当前页面url网址信息

这篇文章主要为大家介绍了js准确获取当前页面url网址信息的多种方法,包括正则法、split拆分法等,需要的朋友可以参考下 在WEB开发中,时常会用到javascript来获取当前页面的url网址信息,在...

蓓蕾心晴
2017/05/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Angular 英雄编辑器

应用程序现在有了基本的标题。 接下来你要创建一个新的组件来显示英雄信息并且把这个组件放到应用程序的外壳里去。 创建英雄组件 使用 Angular CLI 创建一个名为 heroes 的新组件。 ng gener...

honeymoose
今天
4
0
Kernel DMA

为什么会有DMA(直接内存访问)?我们知道通常情况下,内存数据跟外设之间的通信是通过cpu来传递的。cpu运行io指令将数据从内存拷贝到外设的io端口,或者从外设的io端口拷贝到内存。由于外设...

yepanl
今天
6
0
hive

一、hive的定义: Hive是一个SQL解析引擎,将SQL语句转译成MR Job,然后再在Hadoop平台上运行,达到快速开发的目的 Hive中的表是纯逻辑表,就只是表的定义,即表的元数据。本质就是Hadoop的目...

霉男纸
今天
3
0
二、Spring Cloud—Eureka(Greenwich.SR1)

注:本系列文章所用工具及版本如下:开发工具(IDEA 2018.3.5),Spring Boot(2.1.3.RELEASE),Spring Cloud(Greenwich.SR1),Maven(3.6.0),JDK(1.8) Eureka: Eureka是Netflix开发...

倪伟伟
昨天
13
0
eclipse常用插件

amaterasUML https://takezoe.github.io/amateras-update-site/ https://github.com/takezoe/amateras-modeler modelGoon https://www.cnblogs.com/aademeng/articles/6890266.html......

大头鬼_yc
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部