首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ajax无刷新页面切换,历史记录后退前进解决方案

问题描述 我们在工作中常常遇到需要用ajax来显示下一页和上一页,ajax可以不刷新页面进行操作!但是,假如你想通过浏览器的历史记录返回上一页和下一页。那么ajax默认是做不到的!...window.onpopstate history.go和history.back(包括用户按浏览器历史前进后退按钮)触发,并且页面无刷的时候(由于使用pushState修改了history)会触发popstate...事件,事件发生时浏览器会从history中取出URL和对应的state对象替换当前的URL和history.state。...而当有浏览者点击浏览器“后退”或“前进”按钮时,我们用下面的代码来响应用户的操作: window.onpopstate = function(event){ if(event.state){...然后在页面初始化的时候,绑定到页面中。

1.4K30

JSP 防止网页刷新重复提交数据

后来,看到竟然有那么多的人想要禁用这个后退按钮,我也就释然(想要禁用的只有后退按钮,不包括浏览器的前进按钮)。因为在默认情况下,用户提交表单之后可以通过后退按钮返回表单页面(而不是使用“编辑”按钮!)...它强制浏览器重新访问服务器下载页面,而不是从缓存读取页面。使用这种方法时,编程者的主要任务是创建一个会话级的变量,通过这个变量确定用户是否仍旧可以查看那个不适合通过后退按钮访问的页面。...由于浏览器不再缓存这个页面,当用户点击后退按钮时浏览器将重新下载该页面,此时程序就可以检查那个会话变量,看看是否应该允许用户打开这个页面。        ...Web页面,必须注意以下几点:      只有在使用安全连接时“Pragma:   no-cache”才防止浏览器缓存页面。...然而,由于这种方法不能适用于所有的浏览器,所以是不推荐使用的。但如果是在Intranet环境下,管理员可以控制用户使用哪种浏览器,我想还是有人会使用这种方法。

11.6K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    实现一个前端路由,如何实现浏览器的前进与后退 ?

    •url 不存在于浏览记录中即为前进,前进时,往数组里面 push 当前的路由。•url 在浏览记录的末端即为刷新,刷新时,不对路由数组做任何操作。...注意:这个浏览记录需要存储在 sessionStorage 中,这样用户刷新后浏览记录也可以恢复。...我们使用两个栈,X 和 Y,我们把首次浏览的页面依次压入栈 X,当点击后退按钮时,再依次从栈 X 中出栈,并将出栈的数据依次放入栈 Y。...当我们点击前进按钮时,我们依次从栈 Y 中取出数据,放入栈 X 中。当栈 X 中没有数据时,那就说明没有页面可以继续后退浏览了。当栈 Y 中没有数据,那就说明没有页面可以点击前进按钮浏览了。...当你通过浏览器的后退按钮,从页面 c 后退到页面 a 之后,我们就依次把 c 和 b 从栈 X 中弹出,并且依次放入到栈 Y。这个时候,两个栈的数据就是这个样子: ?

    1.6K30

    Flutter Web:刷新与后退问题

    前言 使用flutter开发web页面,在pc端使用就会面临刷新的问题。尤其是刷新时,本地变量清空导致页面问题,所以就需要考虑全局缓存的问题。...这样在浏览器上访问是,当切换页面可以看到地址栏中的url后面是带着参数的,刷新时这些参数则不会丢失,页面会重新通过app的route处理获取这些参数。...对应的值 后退 浏览器的后退操作和刷新一样是常用操作,但是有时候我们并不想回退到上一页,比如在当前页面弹窗提示用户是否返回。...刷新后后退 在上步中其实没有完全解决问题,问题在刷新后再后退,这不仅仅是拦截后退操作时存在的问题。...回到最开始的A -> B -> C,如果不刷新,点击回退后是 stack中是A -> B -> C -> B(浏览器中history是 A -> B ) 这时候虽然页面表现没问题,但是stack同样是错的

    2.7K30

    HTML5 简介(三):利用 History API 无刷新更改地址栏

    用户每次点击「后退」按钮都会取走最上面的那个盘子,叫做「出栈」。而每次浏览器显示的自然是最顶端的盘子的内容。...「前进」、「后退」按钮时,就会触发popstate事件。...例如,在我们的例子中,有: e.state.id == 2; e.state.name == "profile"; replaceState 方法 有时,你希望不添加一个新记录,而是替换当前的记录(比如对网站的...假设一个页面左侧是若干导航链接,右侧是内容,同时导航时只有右侧的内容需要更新,那么刷新整个页面无疑是浪费的。这时我们可以使用 AJAX 来拉取右面的数据。...为了处理用户前进、后退,我们监听popstate事件。当用户点击前进或后退按钮时,浏览器地址自动被转换成相应的地址,同时popstate事件发生。

    2.3K10

    hash和history路由模式

    前端路由是指在浏览器端控制页面内容切换显示的机制。在没有服务器端参与的情况下,前端路由可以根据URL的变化,对应展现不同的内容,实现页面的“伪”跳转。...、CSS 统一加载,部分页面按需加载 SEO 难度较大:由于所有的内容都在一个页面中动态替换显示,所以在 SEO 上其有着天然的弱势。...根据nginx的配置,当我们在地址栏输入 http://www.xxx.com 时,这时会打开我们 dist 目录下的 index.html 文件,然后我们再跳转路由进入到 http://www.xxx.com...只有#符号之前的内容才会包含在请求中被发送到后端,也就是说就算后端没有对路由全覆盖,但是不会返回404错误 hash值的改变,都会在浏览器的访问历史中增加一个记录,所以可以通过浏览器的回退、前进按钮控制...单页应用 当我们在浏览器地址栏输入一个地址时,浏览器就会去服务端去请求内容。但每次点击一个链接,就去服务端请求,这样会有页面加载的等待。

    22310

    前端路由三种模式原理

    刷新页面。 history.back()回退。 整个页面重新加载,浏览器历史可以显示每一个地址。考虑到安全性但是JS代码中是无法操作的。 2. Hash路由方式。...并不刷新页面。 #后跟的就是页面Hash,同样hash的改变也会推进浏览器历史记录中。 支持后退前进。...可以改变网址(存在跨域限制)而不刷新页面,这个强大的特性后来用到了单页面应用如:vue-router,react-router-dom中。...更关键的一点是,因为hash发生变化的url都会被浏览器记录下来,从而你会发现浏览器的前进后退都可以用了,同时点击后退时,页面字体颜色也会发生变化。...相对于hash路由来讲前端只能控制#后的url地址,而history api允许在同源策略下进行任意的自由路由设置而不刷新页面。

    1.1K30

    【开发指南】(六)Ionic3从目录结构理解开发

    的命令行生成为原始的静态html页面,并存放在www目录(见上图所示),也就是说www在开发过程中是不需要理的,可以任意删除。...当我们想部署网页时,只需把www目录拷贝到网站服务器上即可;当我们想打包app时,命令行执行打包指令会生成一个调用浏览器插件的原生项目,同时把www目录拷贝到项目中,浏览器插件的入口网页指向www的index.html...,从而在app中实现本地浏览网页的效果,其中页面和脚本等因为是本地的就不需要网上加载,在数据加载过程中就已经可以看到页面,等数据加载完成自动局部刷新页面即可,这就是ionic的运行机理,也是混合式应用的其中一种常见套路...package.json: node安装模块时的依据文件,在里面配置的内容,在执行npm install命令后会生成到node_modules目录。...而压缩打包混淆等都是ionic框架内部处理了,所以我们只需专注于页面的实现,那最最简单的开发步骤就是,在pages里面新建一个页面,写好逻辑,然后在app.module.ts添加配置即可。

    2.8K10

    【JavaScript 教程】浏览器—History 对象

    // 后退到前一个网址 history.back() // 等同于 history.go(-1) 浏览器工具栏的“前进”和“后退”按钮,其实就是对 History 对象进行操作。...如果参数超过实际存在的网址范围,该方法无效果;如果不指定参数,默认参数为0,相当于刷新当前页面。...history.go(0); // 刷新当前页面 注意,移动到以前访问过的页面时,页面通常是从浏览器缓存之中加载,而不是重新要求服务器发送新的网页。...该事件触发时,该对象会传入回调函数。也就是说,浏览器会将这个对象序列化以后保留在本地,重新载入这个页面的时候,可以拿到这个对象。如果不需要这个对象,此处可以填null。 title:新页面的标题。...这时,在地址栏输入一个新的地址(比如访问google.com),然后点击了倒退按钮,页面的 URL 将显示2.html;你再点击一次倒退按钮,URL 将显示1.html。

    1.2K10

    使用Ionic2开发Todo应用0 开始之前1 创建新的Ionic 2工程2. 设置主页(Home page)3 持久化数据保存4 总结

    这些服务也被称作“providers”将被放置在一个providers文件夹。 现在,只有一个HomePage组件,设置一个虚拟视图。在我们的应用程序中我们要修改这个来显示的所有待办事项列表。...root page 根页面是您应用程序显示的第一个页面,然后你可以从这里导航到其他页面。改变Ionic 2应用程序中的视图可以通过改变这一根页面,或** push ** 推或 pop弹出视图。...现在我们已经建立了一些假的数据(我们使用ionViewDidLoad生命周期钩子,这将在页面加载时被触发),您应该能够看到它已经在列表中渲染了: ?...运行如下命令来生成一个add-item页面 ionic g page AddItemPage 任何时候当我们创建一个新页面,我们需要确保该页面被导入(imported)到我们的 app.module.ts...这次我们定义了另一个按钮,简单地调用了定义在add-item-page.ts中的saveItem函数。

    6.1K50

    Selenium3 + Python3自

    控制浏览器操作 控制浏览器窗口大小 在测试过程中,我们在打开浏览器后,根据需求可自定义调整浏览器的尺寸大小。WebDriver提供了set_window_size()方法来设置浏览器的大小。...如果页面没有最大化,可以调用driver.maximize_window()将浏览器最大化,相当于点击了页面右上角的最大化按钮,maximize_window()方法不需要参数。...值得注意的是,在定位元素的时候,有些网页如果不是全屏展示时,将有可能定位不准!!!...、后退 在当前页面打开一个新的链接后,如果想回退到前一个页面,使用如下driver.back(),相当于点击了浏览器的后退按钮 和back操作对应的是浏览器前进操作driver.forward(),相当于点击了浏览器的前进按钮...网页上显示的信息可能不是最新的,需要对页面进行刷新,使用refresh()方法刷新页面,相当于点击浏览器的刷新按钮。

    52810

    url的操作之pushState、replaceState和popstate

    上一节我们说地址栏跳转的时候,谈到了浏览器会缓存用户访问url序列,我们可以通过浏览器的前进后退按钮或者通过js提供的方法,访问这个序列里的url,不过关于这一点上一节我们只说了window.history.go...,它只会将目标url添加到序列中,并且出现在地址栏中,但并不会立即加载并跳转到这个页面,但如果你访问了新的页面,点击返回按钮的时候,或者在当前页面刷新时,浏览器就会加载并跳转到你新添加的这个url。...打开任意网页,在控制栏输入下面的代码,看看地址栏发生了什么变化,这时候页面是不是没有发生变化,然后你再点击刷新按钮试一下 history.pushState({}, 'title', '/user')...利用此特性,我们可以动态的修改地址栏的参数,以便在用户下次刷新时候发生不一样的效果,比如我们从其他页面跳转到此页面时会携带一个标识性的参数,我们用完这个参数后可以删除这个参数,以便显示此页面的默认显示内容...popstate popstate类似于一个事件函数,当用户在浏览器点击后退、前进,或者在js中调用histroy.back(),history.go(),history.forward()等,会触发popstate

    2.9K20

    【开发指南】(四)Ionic3快速上手并了解这些

    : ionic start --help 常用的命令有(不区分大小写): ionic Start ionic Serve ionic Build ionic Emulate ionic Run ionic...成功提示 其中,我们可以cd myDemo进入到项目,然后根据上图,敲入命令在浏览器预览: ionic serve 也可以两步并作一步执行: cd myDemo && ionic serve 命令执行完...成功运行界面 如果你的是苹果系统,装了xcode,可以敲入以下命令直接在真机或模拟器中运行。...如果没有装、不想装、装不上原生环境的,可以手机下载ionic devApp来WIFI共联看应用效果: ?...,有兴趣可以看此文: http://www.jianshu.com/p/f508b3e2ecc7 8、建议使用chrome调试 调试Web时,调出【开发者工具】,选【终端】模式,以更好查看应用效果,在

    3.2K20

    HTML 面试要点:History 和 Hash 路由方式

    # 前端路由实现方法 路由需要实现以下功能: 当浏览器地址变化时,切换页面; 点击浏览器【后退】、【前进】按钮时,网页内容跟随变化; 刷新浏览器,网页加载当前路由对应的内容。...,但允许在地址之间跳转 浏览器工具栏的 “前进” 和 “后退” 按钮,其实就是对 History 对象进行操作 # 属性 History 对象主要有两个属性: History.length 当前窗口访问过的页面数量...() 移动到上一个网址,相当于点击浏览器后退键,该方法对于第一个访问的页面无效 注意移动到以前访问的页面时,页面通常是从浏览器缓存中加载,而不是重新请求服务器发送新的网页 History.forward...() history.go(-1); // 相当于 history.back() history.go(0); // 相当于刷新当前页面 History.pushState() 用于在历史中添加一条记录...可以将该对象内容传递到新页面中,不需要是可以填 null title 指标题,但多数浏览器不支持,建议传空字符串 url 新的网址,必须与当前页面处于同一个域,不指定的话则为当前路径,如果设置一个跨域网址会报错

    83220

    Vue笔记(10) vue-router

    history.back()的时候就会出栈,也就会返回到我们上一个push进去的URL中 此时我们可以按浏览器左上角的前进后退 replaceState 使用history.replaceState...因为浏览器不知道我们什么时候使用哪个路由.所以我们还需要使用不同的标签,使我们的URL能发生改变 router-link用于显示标签和内容 router-view决定渲染时的位置,用于占位 App.vue...router-link是默认将内容渲染成a标签的 假如我现在将它换一个位置 显示出来的就是这样的 下面是一点细节问题,就是当我们打开页面时,应该自动打开首页,而不是需要我们手动选择...: 当对应的路由匹配成功时,会自动给当前元素设置一个router-link-active的class,设置active-class可以修改默认的名称 在进行高亮显示的导航菜单或者...,通过点击跳转到对应的页面 本文由“壹伴编辑器”提供技术支持 动态路由 假如我们在进入到用户的页面时想要在路径中显示用户的id,那么应该怎么实现这种动态路由呢?

    87510

    2019面试题:简单介绍下Ajax

    直白地说,就是没用Ajax的网页,你点一个按钮就要刷新一下页面,尽管新页面上只有一行字和当前页面不一样,但你还是要无聊地等待页面刷新。...我们传统的web应用,当我们提交一个表单请求给服务器,服务器接收到请求之后,返回一个新的页面给浏览器,这种做法浪费了很多带宽,因为我们发送请求之前和获得的新页面两者中很多的html代码是相同的,由于每次用户的交互都需要向服务器发送请求...浏览器中首次引用,使我们的网络应用更加强大。...Ajax缺点: 1.破坏了前进后退功能,用户往往通过后退按钮来取消上一步操作,但是使用ajax无法实现。...可以使用Gmail来解决这个问题,它只是采用的一个比较笨但是有效的办法,即用户单击后退按钮访问历史记录时,通过创建或使用一个隐藏的IFRAME来重现页面上的变更。 2.安全问题。

    56600

    JavaScript交互式网页设计 • 【第3章 JavaScript浏览器对象模型】

    状态栏文本 window 对象常用方法 方法 说明 prompt 显示可提示用户输入的对话框 alert 显示带有一个提示消息和一个确定按钮的警示框 confirm 显示一个带有提示信息、确定和取消按钮的确认框...,使用 history对象可以将当前浏览器页面跳转到某个曾经打开过的页面 方法 描述 back() 后退一个页面,相当于浏览器后退按钮 forward() 前进一个页面,相对于浏览器前进按钮 go().../) reload() 方法 重新加载当前页面,相对于浏览器的刷新按钮 assign() 方法 加载新的文档 示例:使用location对象中的属性和方法实现加载用户所选页面   显示带有一个提示消息和一个“确定”按钮的警示框 confirm() 方法:显示一个带有提示信息、“确定”和“取消”按钮的确认框 open() 方法:打开一个新的浏览器窗口,...URL reload() 方法:重新加载当前页面,相对于浏览器的刷新按钮 assign() 方法:加载新的文档 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    81410

    关于浏览器后退键遇到的一些问题

    事情是这样的,用户登陆后进入首页,点击退出,然后使用浏览器的后退按钮进入了首页,这时候首页走本地缓存,并且一些动态内容和登陆页混在了一起,样式乱了(具体原因没有细纠)。...Request缓存  HTML的HTTP协议头信息中控制着页面在几个地方的缓存信息,包括浏览器端,中间缓存服务器端(如:squid等),Web服务器端。...,GMT格式; Expires过时期限值,GMT格式,指浏览器或缓存服务器在该时间点后必须从真正的服务器中获取新的页面信息; 上面两个值在JSP中设置值为字符型的GMT格式,无法生效,设置long类型才生效...需要注意的是必须使用GMT时间格式; --> Response缓存 如何在点击浏览器前进、后退键时刷新页面而不读取缓存 点击浏览器的后退键...,总是会读取缓存,这样会导致有时候获取不到页面上的值,如果点击后退键时刷新页面而不读取缓存,这样就不会产生获取不到值的问题。

    1.4K50
    领券