广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >如何使用ajax和history.pushState无刷新改变页面URL
  • 502
分享到

如何使用ajax和history.pushState无刷新改变页面URL

2024-04-02 19:04:59 502人浏览 泡泡鱼
摘要

本篇内容介绍了“如何使用ajax和history.pushState无刷新改变页面URL”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望

本篇内容介绍了“如何使用ajax和history.pushState无刷新改变页面URL”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

表现

如果你使用chrome或者firefox等浏览器访问本博客、GitHub.com、plus.Google.com等网站时,细心的你会发现页面之间的点击是通过ajax异步请求的,同时页面的URL发生了了改变。并且能够很好的支持浏览器前进和后退。

是什么有这么强大的功能呢?

HTML5里引用了新的api,history.pushState和history.replaceState,就是通过这个接口做到无刷新改变页面URL的。

与传统的AJAX的区别

传统的ajax有如下的问题:

1、可以无刷新改变页面内容,但无法改变页面URL

2、为了更好的可访问性,内容发生改变后,通常改变URL的hash

3、hash的方式不能很好的处理浏览器的前进、后退等问题!

4、进而浏览器引入了onhashchange的接口,不支持的浏览器只能定时去判断hash是否改变

5、但这种方式对搜索引擎很不友好

6、twitter和google约定了使用#!xxx(即hash第一个字符为!),搜索引擎进行支持。

为了解决传统ajax带来的问题,html5里引入了新的API,即:history.pushState, history.replaceState

可以通过pushState和replaceState接口操作浏览器历史,并且改变当前页面的URL。

pushState是将指定的URL添加到浏览器历史里,replaceState是将指定的URL替换当前的URL。

如何使用

复制代码 代码如下:


<strong >var state = {
title: title,
url: options.url,
otherkey: othervalue
};
window.history.pushState(state, document.title, url);</strong>


state对象除了要title和url之外,你也可以添加其他的数据,比如:还想将一些发送ajax的配置给保存起来。

replaceState和pushState是相似的,这里就不多介绍了。
如何响应浏览器的前进、后退操作

window对象上提供了onpopstate事件,上面传递的state对象会成为event的子对象,这样就可以拿到存储的title和URL了。

复制代码 代码如下:


window.addEventListener('popstate', function(e){
if (history.state){
var state = e.state;
//do something(state.url, state.title);
}
}, false);


这样就可以结合ajax和pushState完美的进行无刷新浏览了。
一些限制

1、传递的URL必须是同域下的,无法跨域

2、state对象虽然可以存储很多自定义的属性,但对于不可序列化的对象则不能存储,如:DOM对象。
对应后端的一些处理

这种模式下除了当前使用ajax可以无刷新浏览外,还要保证直接请求改变的URL后也可以正常浏览,所以后端要对这些处理下。

1、对使用pushState的ajax发送一个特殊的头,如: setRequestHeader(‘PJAX', ‘true')。

2、后端获取到有PJAX=true的header时,将页面中通用的部分都不输出。比如:PHP可以通过下面的判断

复制代码 代码如下:


function is_pjax(){
return array_key_exists('Http_X_PJAX', $_SERVER) && $_SERVER['HTTP_X_PJAX'] === 'true';
}


虽然接口上只有pushState、replaceState、onpopstate,但在使用的时候需要做很多的处理。

针对这个已经写好了一个基于Jquery插件,接下来的文章会详细介绍如何使用pjax(ajax+pushState)进行无刷新改变URL浏览。

“如何使用ajax和history.pushState无刷新改变页面URL”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 如何使用ajax和history.pushState无刷新改变页面URL

本文链接: https://www.lsjlt.com/news/76077.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用ajax和history.pushState无刷新改变页面URL
    本篇内容介绍了“如何使用ajax和history.pushState无刷新改变页面URL”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望...
    99+
    2022-10-19
  • 如何使用ajax实现无刷新改变页面内容和地址栏URL
    本篇内容主要讲解“如何使用ajax实现无刷新改变页面内容和地址栏URL”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用ajax实现无刷新改变页面内容和地址...
    99+
    2022-10-19
  • Ajax如何无刷新Url提交页面
    这篇文章将为大家详细讲解有关Ajax如何无刷新Url提交页面,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在Jquery,porotype,Ext等框架流行之后,大量简化...
    99+
    2022-10-19
  • ajax如何实现改变状态和删除无刷新
    这篇文章给大家分享的是有关ajax如何实现改变状态和删除无刷新的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. 01.php为主程序,调用smarty模板遍历输出:<php  incl...
    99+
    2023-06-08
  • 如何使用AJAX实现无刷新数据分页
    这篇文章将为大家详细讲解有关如何使用AJAX实现无刷新数据分页,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、实现过程注意:一下的内容都是在服务器内使用的。首先要在服务器的路径下建立几个文件,比如,pa...
    99+
    2023-06-08
  • jQuery的ajax中如何使用FormData实现页面无刷新上传功能
    小编给大家分享一下jQuery的ajax中如何使用FormData实现页面无刷新上传功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1,先看效果图期望的功能和效果很简单:点击页面中的上传...
    99+
    2022-10-19
  • React如何使用refresh_token实现无感刷新页面
    目录步骤如下:具体实现步骤如下: 1-token过期根据refresh_token获取新的token 重新获取数据 2-创建一个新的axios实例 【使用request防止再次进入请...
    99+
    2022-11-13
  • 如何使用Ajax+php数据交互并且局部刷新页面
    这篇文章主要介绍如何使用Ajax+php数据交互并且局部刷新页面,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是Ajax?国内翻译常为“阿贾克斯”和阿贾克斯足球队同音,AJAX ...
    99+
    2022-10-19
  • 如何实现一个简单的Ajax页面无刷新进行用户验证案例
    这篇文章给大家分享的是有关如何实现一个简单的Ajax页面无刷新进行用户验证案例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果如下图:实现主要过程:在UsersAction类中...
    99+
    2022-10-19
  • 如何使用ajax实现数据库中随机读取5条数据动态在页面中刷新
    这篇文章主要介绍了如何使用ajax实现数据库中随机读取5条数据动态在页面中刷新,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前台代码:&nb...
    99+
    2022-10-19
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作