Ajax丢失刷新后数据怎么处理

这次给大家带来Ajax丢失刷新后数据怎么处理,处理Ajax丢失刷新后数据的注意事项有哪些,下面就是实战案例,一起来看一下。

Ajax 简介:

AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。

AJAX = 异步 JavaScript和XML(标准通用标记语言的子集)。

AJAX 是一种用于创建快速动态网页的技术。

通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个网页页面。

存在问题

如果使用Firefox等浏览器访问RMS网站时,我们可能会发现页面之间的切换是通过AJAX异步请求实现的,同时页面的URL不会发生改变,虽然可以通过页面上的按钮通过AJAX异步请求实现回退刷新,但是对于浏览器前进和后退不能支持,每当刷新与后退之后,页面都会退到最开始的欢迎页面。AJAX可以实现页面的局部刷新,可以做到非常好的数据加载效果,给用户带来非常良好的体验,但是AJAX不能在浏览器的历史会话中保留记录,当你点开一个页面,AJAX各种数据加载非常快捷,例如一个列表页面可以用异步加载来翻页,但是如果用户一不小心刷新了页面,那么页码就得重新开始计算,一旦用户改变了会话状态(浏览器的前进、后退、刷新),那么Ajax丢失刷新后数据怎么处理

传统的AJAX存在如下的问题:

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

2、不能支持通过网址直接访问系统某一模块,必须进过点按操作

3、回退、刷新必须开发人员自己第一,既给开发人员增加了工作量,又不符合用户习惯

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

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

使用技术

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

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

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

history.pushState(state, title, url)

登录后复制

将当前URL和history.state加入到history中,并把新的state和URL添加到当前。不会造成页面刷新。

state:与要跳转到的URL对应的状态信息。

title:标题(现在是被忽略,未作处理)。

url:要跳转到的URL地址,不能跨域。

history.replaceState(state, title, url)

登录后复制

history.replaceState()操作类似于history.pushState(),不同之处在于replaceState()方法会修改当前历史记录条目而并非创建新的条目。

state:与要跳转到的URL对应的状态信息。

title:标题(现在是被忽略,未作处理)。

url:要跳转到的URL地址,不能跨域。

addEventListener(type, listener)
addEventListener是一个侦听事件并处理相应的函数。

type:事件的类型。

listener:侦听到事件后处理事件的函数。此函数必须接受 Event对象作为其唯一的参数,并且不能返回任何结果。

解决方法

由于AJAX无刷新改变页面内容的,所以页面的URL始终是不变的,为了区分页面上的各个不同内容,首先需要重新定义一下各个页面的URL,因为RMS网站多使用$.post异步请求,我们可以用URL记录post请求的各个参数(请求地址、传递参数),当浏览器进行刷新、回退操作时,根据URL记录的信息自动发送post请求,进入对应页面,从而实现希望的功能。

定义URL语法:

已如下地址为例:

“http://localhost/rms_hold/index.php/Home/Index/loadHomePage#/rms_hold/index.php/Home/ResourceRequest/getRequestPage@apply_type=1&resource_name=ADM_BIZCARD!1”

“http://localhost/rms_hold/index.php/Home/Index/loadHomePage”是原先页面的URL,如果在问题解决之前在RMS网站上进行任何点按操作,网址一直不会有任何变动。现在我们使用“#”分割网址,“#”之后就是我们所记录的ajax请求“/rms_hold/index.php/Home/ResourceRequest/getRequestPage”是请求的地址,它由“#”与“@”分割,而在“@”与“!”之间的这是发向请求地址的各个参数,“apply_type=1”与“resource_name=ADM_BIZCARD”由“&”进行分割。

刷新、回退监听处理:

if (history.pushState) {window.addEventListener("popstate", function() {back_ajax_mod_url();back_ajax_post();if(location.href.indexOf("#")==-1){window.location.reload();}});back_ajax_mod_url();back_ajax_post();}

登录后复制

如以上代码所示,window对象上提供了onpopstate事件,可以使用addEventListener方法监听onpopstate事件,每当URL因为浏览器回退时都会对得到的URL在back_ajax_mod_url()与back_ajax_post()函数中进行解析、处理,而当浏览器刷新时,根据history.pushState的返回值不空,依然会对得到的URL在back_ajax_mod_url()与back_ajax_post()函数中进行解析、处理。

对外接口:

function back_ajax_mod_url(){var url_ajax=ajaxback_url.pop();var title ="Home | UniqueSoft RMS";if(url_ajax){history.pushState({ title: title }, title,location.href.split("#")[0] + "#"+ url_ajax);}}

登录后复制

介绍一下back_ajax_mod_url()函数,它与数组ajaxback_url组成对外接口,ajaxback_url是一个全局数组,用来存放需要加入到history中的URL,然后由back_ajax_mod_url()函数在无页面刷新的情况下将当前URL和history.state加入到history中。

$("#reportTable tbody").on("click", "trtd img[alt = 'Detail']",function() {var id = $(this).attr("business_leave_id");$.post("MODULE/ReportCenter/getReportDetailPage",{"report_name": "ADM_TRAVEL_REP","item_id": id,},function(data) {ajaxback_url.push("MODULE/ReportCenter/getReportDetailPage"+ "@" + "item_id=" + id + "&" +"report_name=ADM_TRAVEL_REP");$("#container").html(data);back_ajax_mod_url();});});

登录后复制

以上函数是RMS系统里的一个AJAX异步请求事件,会造成页面无刷新变化,加粗部分就是我们提供的对外接口,使用该接口后在history中会产生一条新的URL用来记录达到该页面的post方法。

URL解析处理器:

如下面函数所示back_ajax_post()为RMS系统的URL解析处理器,根据之前提到的URL语法,读出页面上改变内容的AJAX请求,并且自动发送AJAX请求,获取需要的页面

function back_ajax_post() {if (location.href.indexOf("#")!= -1) {var post_href =location.href.split("#")[1];if (location.href.indexOf("@")!= -1) {var post_url =post_href.split("@")[0];var post_params =post_href.split("@")[1];if(post_params.indexOf("!") != -1) {var post_page_index =post_params.split("!")[1];post_params =post_params.split("!")[0];};} else {var post_url = post_href;var post_params = "";var post_page_index = "";}var get_resource_href =location.href;if(get_resource_href.indexOf("!") != -1) {get_resource_href =get_resource_href.split("!")[0];};if(get_resource_href.indexOf("resource_name=") != -1) {var has_resource_name =get_resource_href.split("resource_name=")[1];var siderbar_index =has_resource_name;} else if(get_resource_href.indexOf("report_name=") != -1) {var has_resource_name =get_resource_href.split("report_name=")[1];var siderbar_index =has_resource_name.split("_REP")[0];};if (!post_page_index ||$("#personalInfo").length  0) {for (var i = 0; i  span.arrow').addClass('open');$(this).parents('.sub-menu').show();});$(this).parent('li').parents('li').addClass('active open');return false;} else {$('.sub-menu').hide();}});$("ul.page-sidebar-menuli").not(".open").find("ul").hide();}}

登录后复制

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

怎么使用Ajax实现循环

ajax加载超时提示怎样实现

以上就是Ajax丢失刷新后数据怎么处理的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2768065.html

(0)
上一篇 2025年3月8日 11:55:21
下一篇 2025年3月8日 11:55:36

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Ajax用户认证与注册使用详解

    这次给大家带来Ajax用户认证与注册使用详解,Ajax用户认证与注册的注意事项有哪些,下面就是实战案例,一起来看一下。 Ajax 表单提交是一个功能强大的技术,提供一种发送 web 表单的方法,无需重载浏览器窗口。jQuery 库让您使用 …

    编程技术 2025年3月8日
    000
  • jQuery+与ajax怎么实现局部刷新功能

    这次给大家带来jQuery+与ajax怎么实现局部刷新功能,jQuery+与ajax实现局部刷新功能的注意事项有哪些,下面就是实战案例,一起来看一下。 当某几个页面都有相同的头部、导航、底部的时候,点击导航链接可以在几个页面中切换,此时想要…

    编程技术 2025年3月8日
    200
  • ajax读取properties步骤详解

    这次给大家带来ajax读取properties步骤详解,ajax读取properties的注意事项有哪些,下面就是实战案例,一起来看一下。 properties资源文件的内容如下: hello=englishwwname=english z…

    编程技术 2025年3月8日
    200
  • AJAX请求队列使用详解

    这次给大家带来AJAX请求队列使用详解,使用AJAX请求队列的注意事项有哪些,下面就是实战案例,一起来看一下。 AJAX在使用的过程中会遇到一个问题,当用户短时间内执行了多个异步请求的时候,如果前一个请求没完成,将会被取消执行最新的一个请求…

    编程技术 2025年3月8日
    200
  • jQuery+json做出Ajax调用功能(附代码)

    这次给大家带来jQuery+json做出Ajax调用功能(附代码),jQuery+json做出Ajax调用功能的注意事项有哪些,下面就是实战案例,一起来看一下。 Userservlet.java代码: package com.iss.ser…

    编程技术 2025年3月8日
    200
  • AJAX请求队列的使用详解

    这次给大家带来AJAX请求队列的使用详解,使用AJAX请求队列的注意事项有哪些,下面就是实战案例,一起来看一下。 AJAX在使用的过程中会遇到一个问题,当用户短时间内执行了多个异步请求的时候,如果前一个请求没完成,将会被取消执行最新的一个请…

    编程技术 2025年3月8日
    200
  • JS实现ajax调用后台定义(附代码)

    这次给大家带来JS实现ajax调用后台定义(附代码),JS实现ajax调用后台定义的注意事项有哪些,下面就是实战案例,一起来看一下。 1.首先我们先创建一个antzone.aspx页面。 2.在它的cs文件中创建如下函数: public s…

    编程技术 2025年3月8日
    200
  • Ajax实现Loading效果

    这次给大家带来Ajax实现Loading效果,Ajax实现Loading效果的注意事项有哪些,下面就是实战案例,一起来看一下。 在Ajax进行后台数据请求的过程中,我们有时候会希望用户能知道页面后台还在做一些事情,这时候就需要给用户一个非常…

    编程技术 2025年3月8日
    200
  • ajax如何做出页面局部跳转功能

    这次给大家带来ajax如何做出页面局部跳转功能,ajax做出页面局部跳转功能的注意事项有哪些,下面就是实战案例,一起来看一下。 通过代码示例分析给大家介绍ajax实现页面局部跳转与结果返回,具体内容如下: 1、带有结果返回的提交过程 这里用…

    编程技术 2025年3月8日
    200
  • ajax实现三级联动(附代码)

    这次给大家带来ajax实现三级联动(附代码),ajax实现三级联动的注意事项有哪些,下面就是实战案例,一起来看一下。 1.首先在一个页面上布置一个p 方便日后引用方法 //p的id为“sanji” 登录后复制 2.sanji js处理页面 …

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论