为什么我这AJAXnga刷新不出出来,哪里出了问题呢??

解决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”是原先页面的URL,如果在问题解决之前在RMS网站上进行任何点按操作,网址一直不会有任何变动。现在我们使用“#”分割网址,“#”之后就是我们所记录的ajax请求“”是请求的地址,它由“#”与“@”分割,而在“@”与“!”之间的这是发向请求地址的各个参数,“”与“”由“&”进行分割。
刷新、回退监听处理:
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];
var post_url = post_
var post_params = "";
var post_page_index = "";
var get_resource_href =location.
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_
} 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) {
if (!post_url) {
window.location.href ="__MODULE__";
type: "post",
url: post_url,
data: post_params,
success: function(res){
$('#pageContainer').html(res);
if(post_page_index) {
location.href= location.href.split("!")[0] + "!1";
location.href= location.href.split("!")[0];
error: function(res) {
window.location.href = "__MODULE__";
//for request page next&back
if (post_page_index) {
var previous_index =$(".navbar,.steps .navbar-innerul.row-fluid").find("li.active").find(".number").text();
var differ =post_page_index - previous_
lock_for_req_back_next =1;
if (differ & 0) {
for (var i = 0; i & i++) {
$("#personalInfo").trigger("click");
differ = -
for (var i = 0; i & i++) {
$("#btn_back").trigger("click");
lock_for_req_back_next =0;
//for side bar
if (siderbar_index =="IT_TESTMACHINE" || siderbar_index == "IT_LAPTOP"|| siderbar_index == "IT_OTHER_RESOURCE") {
siderbar_index ="IT_RESOURCE";
$("ul.page-sidebar-menuli ul.sub-menu li a").each(function() {
var resource_name =$(this).attr("href").split("resource_name=")[1];
if (siderbar_index ==resource_name) {
$('.page-sidebarul').children('li.active').removeClass('active');
$('.page-sidebarul').children('arrow.open').removeClass('open');
$(this).parents('li').each(function() {
$(this).addClass('active');
$(this).children('a & span.arrow').addClass('open');
$(this).parents('.sub-menu').show();
$(this).parent('li').parents('li').addClass('active open');
$('.sub-menu').hide();
$("ul.page-sidebar-menuli").not(".open").find("ul").hide();
AJAX的刷新和前进后退问题解决
监听浏览器返回时刷新上一页面JavaScript JQuery
返回到上一个页面并刷新页面
【JS】:JS实现页面的刷新,后退和前进
AJAX的后退页面刷新问题的解决方法(1)
浏览器回退按钮强制刷新
Ajax加载与点击浏览器后退按钮 回退
解决微信浏览器回退刷掉ajax数据
返回上一页并强制刷新的js代码
没有更多推荐了,richfaces中ajax的局部刷新问题 - JBoss SEAM - ITeye群组
按钮mainBtn被点击时,mainList.resultList,sub1List.resultList,sub2List.resultList都会被执行。
我仅仅想mainList.resultList被执行。
&rich:tabPanel switchType="client" &
&&& &rich:tab label="Main"&
&h:form&&&
&a:region renderRegionOnly="true"&
&&&&&&&&& &a:commandButton id ="mainBtn" ajaxSingle="true" value="Open"
&& eventsQueue="EditQueue" ignoreDupResponses="true"
&& reRender="mainPanel"
&&&&&&&&&& oncomplete="#{rich:component('mainPanel')}.show();" /&
&&&&&&&& &rich:modalPanel id="mainPanel" autosized="true" &
&&&&&&&&&&&&& &rich:dataTable value="#{mainList.resultList}" &
&&&&&&&&&&&&& &/rich:dataTable&
&&&&&&&& &/rich:modalPanel&
&/a:region&
&/h:form&&
&&&&&&&&& &a:commandButton ajaxSingle="true" value="Open"
&& eventsQueue="EditQueue" ignoreDupResponses="true"
&& reRender="sub1Panel"
&&&&&&&&&& oncomplete="#{rich:component('sub1Panel')}.show();" /&
&&&&&&&& &rich:modalPanel id="sub1Panel" autosized="true" &
&&&&&&&&&&&&& &rich:dataTable value="#{sub1List.resultList}" &
&&&&&&&&&&&&& &/rich:dataTable&
&&&&&&&& &/rich:modalPanel&
&&&& &/rich:tab &
&&& &rich:tab label="Sub2"&
&&&&&&&& &rich:modalPanel id="sub2Panel" autosized="true" &
&&&&&&&&&&&&& &rich:dataTable value="#{sub2List.resultList}" &
&&&&&&&&&&&&& &/rich:dataTable&
&&&&&&&& &/rich:modalPanel&
&&&& &/rich:tab &
&/rich:tabPanel
这个应该是JSF1.2的问题了 每次请求(即使是ajax)都需要在后台重新构建组件树所以所有的getter方法都会被调用JSF2.0已经修正了这个问题另:&a:region renderRegionOnly="true" /&我记得被这个包住的控件也可以解决这个问题,但楼主既然使用了为什么还不行呢?难啊是我记错了 有时间再试试...
不要用region,在你的mainBtn的reRender里打上你想要单独更新的那个table的ID就可以了,我一直是这样用的,没出过什么问题。
&a:region renderRegionOnly="true" /&是可以达到局部刷新的上次测试的时候,页面过于复杂,所以得出了错误的结论
相关资源推荐当前位置:
(html)关于ajax下拉刷新问题。
(html)关于ajax下拉刷新问题。
来源:网络整理&&&&&时间: 12:01:14&&&&&关键词:ajax
关于网友提出的“(html)关于ajax下拉刷新问题。”问题疑问,本网通过在网上对“(html)关于ajax下拉刷新问题。”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题:(html)关于ajax下拉刷新问题。
描述:http://www.iteye.com/topic/1141272, 这个例子是在脚本自己无限创建li,如果在真实项目中如何结合ajax调用后台数据呢?谢谢!解决方案1:分批加载呗。在请求数据的时候加上加载数量,首次加载前10个。下拉刷新就再加载10个,然后前台就有20个数据了,每次刷新加载10个数据。解决方案2:看了一下你的代码,你在setTimeout里面模拟一次ajax请求的延时效果。那么把setTimeout替换成真是的ajax即可。举个例子:后台getData接口返回的数据是一个数组:[{name:'item1'},{name:'item2'},{name:'item3'}],你把你的load方法改成下面的: function Load() {
el = document.querySelector("#wrapper ul");
$.get('/getData').done(function(data){//获取服务器数据
for(var i in data){//遍历data
li = document.createElement('li');
li.appendChild(document.createTextNode(data[i].name));//读取数据
el.appendChild(li,el.childNodes[0]);
wrapper.refresh();
如果我的load方法可以解决你的问题,那么,建议用一个前端模板引擎,而不是遍历数组创建元素。js的模板引擎很多的,你可以搜一下,找一款你最喜欢的。
以上介绍了“(html)关于ajax下拉刷新问题。”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/1460665.html
上一篇: 下一篇:更多频道内容在这里查看
爱奇艺用户将能永久保存播放记录
过滤短视频
暂无长视频(电视剧、纪录片、动漫、综艺、电影)播放记录,
按住视频可进行拖动
&正在加载...
举报视频:
举报原因(必填):
请说明举报原因(300字以内):
请输入您的反馈
举报理由需要输入300字以内
感谢您的反馈~
请勿重复举报~
请刷新重试~
收藏成功,可进入
查看所有收藏列表
当前浏览器仅支持手动复制代码
视频地址:
flash地址:
html代码:
通用代码:
通用代码可同时支持电脑和移动设备的分享播放
用爱奇艺APP或微信扫一扫,在手机上继续观看
当前播放时间:
一键下载至手机
限爱奇艺安卓6.0以上版本
使用微信扫一扫,扫描左侧二维码,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/udn
下载安装包到本机:
设备搜寻中...
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
连接失败!
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
部安卓(Android)设备,请点击进行选择
请您在手机端下载爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/udn
下载安装包到本机:
爱奇艺云推送
请您在手机端登录爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
180秒后更新
打开爱奇艺移动APP,点击“我的-扫一扫”,扫描左侧二维码进行登录
没有安装爱奇艺视频最新客户端?
java教程_AJAX局部刷新技术
正在检测客户端...
您尚未安装客户端,正在为您下载...安装完成后点击按钮即可下载
30秒后自动关闭
java教程_AJAX局部刷新技术">java教程_AJAX局部刷新技术
请选择打赏金额:
播放量12.7万
播放量数据:快去看看谁在和你一起看视频吧~
更多数据:
热门短视频推荐
Copyright (C) 2018 & All Rights Reserved
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制
正在为您下载爱奇艺客户端安装后即可快速下载海量视频
正在为您下载爱奇艺客户端安装后即可免费观看1080P视频
&li data-elem="tabtitle" data-seq="{{seq}}"& &a href="javascript:void(0);"& &span>{{start}}-{{end}}&/span& &/a& &/li&
&li data-downloadSelect-elem="item" data-downloadSelect-selected="false" data-downloadSelect-tvid="{{tvid}}"& &a href="javascript:void(0);"&{{pd}}&/a&
选择您要下载的《
后才可以领取积分哦~
每观看视频30分钟
+{{data.viewScore}}分
{{data.viewCount}}/3
{{if data.viewCount && data.viewCount != "0" && data.viewCount != "1" && data.viewCount != "2" }}
访问泡泡首页
+{{data.rewardScore}}分
{{if data.rewardCount && data.rewardCount != 0 && data.getRewardDayCount != 0}}1{{else}}0{{/if}}/1
{{if data.rewardCount && data.rewardCount != 0 && data.getRewardDayCount != 0}}
+{{data.signScore}}分
{{data.signCount}}/1
{{if data.signCount && data.signCount != 0}}
色情低俗内容
血腥暴力内容
广告或欺诈内容
侵犯了我的权力
还可以输入
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制赞助商推荐():}

我要回帖

更多关于 刷新出新内容提示 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信