使用js callback机制实现调用页面局部刷新

需求描述:审批表单页面由我的待办工作中打开,办理完毕后希望关闭该页面并且实现我待办表格的实时刷新;同时该需求也同样适用于从某些工作流管理模块中需要发起审批的情况,比如招聘需求模块中发起录用流程;我的绩效管理中审批绩效等。

我们先来看看之前的实现,该逻辑实现的功能是,从我待办列表中发起审批,审批结束后直接在当前页面,也就是审批页面跳转至一个新的oa主页面,并且打开我的工作-我待办的页签,实现方法如下:


  1. $("#but_back").bind("click", function() { 
  2.         window.top.opener=null; 
  3.         var url = window.location.href; 
  4.         var isoa=url.indexOf('phicomm.com'); 
  5.         //var isoatest=url.indexOf('oatest.phicomm.com'); 
  6.         var curWwwPath=window.document.location.href;  
  7.         var pathName=window.document.location.pathname;  
  8.         var pos=curWwwPath.indexOf(pathName);  
  9.         var localhostPaht=curWwwPath.substring(0,pos);  
  10.         var projectName=pathName.substring(0,pathName.substr(1).indexOf('/')+1); 
  11.         if(isoa>0){ 
  12.             window.top.open(localhostPaht+'/main/index.action?tableName=mywork','_self'); 
  13.         }else{ 
  14.             window.top.open(localhostPaht+projectName+'/main/index.action?tableName=mywork','_self'); 
  15.         } 
  16.     }); 

桌面js的处理逻辑:


  1. $(document).ready(function($){ 
  2.     // 初始化图标 
  3.     initModules(initMenus()); 
  4.       
  5.     refixAppPos(); 
  6.     // 注册事件 
  7.     regClick(); 
  8.       
  9.     sortable(); 
  10.    initIcoRemove(); 
  11.       
  12.     initAppManager(); 
  13.     //解析当前URL判断是否需要跳转制定Table 
  14.     gotoTable(); 
  15. }); 
  16.   
  17. //跳转制定Table 
  18. function gotoTable(){ 
  19.     var tableName = request("tableName"); 
  20.     if(""!=tableName&&null!=tableName&&'undefined'!=tableName){ 
  21.         openUrl($("#desktop_content_icon_"+tableName)); 
  22.     } 

以上方法虽然实现了办理结束后跳至我的待办的功能,但有以下缺陷:

跳转是在新页面中,并非在调用页面,这样就形成了调用和跳转页面两个相同的桌面;

新的页面并非与原调用页面完全一致,调用页面如打开多个页签,新打开的页面相当于将除我的待办外的其他页签关闭,并不符合用户的需求;

用户体验不友好

我们使用js callback的实现如下,当前页面的调用页面非空且未关闭时,我们就直接调用页面中的js方法实现其局部的刷新。


  1. /** 刷新父窗口关闭弹出窗口 */ 
  2.     function refreshAndClose(){ 
  3.         var jscallback = $.trim($("#jscallback").val()); 
  4.         var type = $.trim($("#type").val()); 
  5.         if (window.opener  && !window.opener.closed && jscallback!=null && jscallback!="") { 
  6.             if(!type){ 
  7.                 //本页面的调用页面执行其嵌入或调用的js方法 
  8.                 eval("window.opener."+jscallback+"();"); 
  9.             } 
  10.             window.close();//当前页面关闭 
  11.         } else { 
  12.             window.top.opener=null; 
  13.             var url = window.location.href; 
  14.             var isoa=url.indexOf('phicomm.com'); 
  15.               
  16.             var curWwwPath=window.document.location.href;  
  17.             var pathName=window.document.location.pathname;  
  18.             var pos=curWwwPath.indexOf(pathName);  
  19.             var localhostPaht=curWwwPath.substring(0,pos);  
  20.             var projectName=pathName.substring(0,pathName.substr(1).indexOf('/')+1); 
  21.             if(isoa>0){ 
  22.                   
  23.                 window.top.open(localhostPaht+'/main/index.action?tableName=mywork','_self'); 
  24.             }else{ 
  25.                 window.top.open(localhostPaht+projectName+'/main/index.action?tableName=mywork','_self'); 
  26.             } 
  27.         } 
  28.     }

调用页面js:grid即为需要局部刷新的表格。


  1. function openUrl(url){ 
  2.     url=url+"&jscallback=callsus" 
  3.          window.open(url,'_blank');    
  4. function callsus(){ 
  5.     $('#performanceDataGrid').reload(); 
  6. }

通过js callback实现了调用页面的局部刷新,并对其他应用的类似功能具有一定的指导和参考意义。

作者:佚名

来源:51CTO

时间: 2024-08-29 05:40:41

使用js callback机制实现调用页面局部刷新的相关文章

require.js-求backbone.js单页面局部刷新的代码。急,急,急

问题描述 求backbone.js单页面局部刷新的代码.急,急,急 我已经配置好backbone.js了,求路由部分的代码.主要是路由部分不会写,不知道怎么把view写到路由里面

浅析PHP页面局部刷新功能的实现小结_php技巧

方法其实挺多的.以前比较常用的是iframe这样来做.现在多了个ajax,所以一般情况下都是用的ajax.第一种方法,ajax实现:当然,ajax使用起来确实很简单就可以实现,但是里面的很多知识还是比较有点深的.我之前做页面时间自动刷新的功能就是用的ajax.完整代码是:1.getTime.php: 复制代码 代码如下: <?phpheader("cache-control:no-cache,must-revalidate");  header("Content-Typ

ASP.net页面局部刷新的情况下,后台代码在满足特定条件下如何弹出一个新的asp.net窗口

问题描述 ASP.net页面局部刷新的情况下,后台代码如何弹出一个新的asp.net窗口,Response.Write("<script>window.open('alarmdialog.aspx','newwindow','height=850,width=1300,top=150,left=500,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no')</script>"

Ajax实现页面局部刷新示例代码小结

网页自动刷新功能在web网站上已经屡见不鲜了,如即时新闻信息,股票信息等,都需要不断获取最新信息.在传统的web实现方式中,想要实现类似的效果,必须进行整个页面的刷新,在网络速度受到一定限制的情况下,这种因为一个局部变动而牵动整个页面的处理方式显得有些得不偿失.Ajax技术的出现很好的解决了这个问题,利用Ajax技术可以实现网页的局部刷新,只更新指定的数据,并不更新其他的数据.    现在创建一个实例,以演示网页的自动刷新功能,该实例模拟火车侯票大厅的显示字幕. 1,服务器端代码 该实例服务器端

关于页面局部刷新例程

 RS技术的一个具体例子    在前面的帖子中,我介绍了RS的基本工作原理,显然如果将RS技术运用在一个网站的设计中将会有很多非凡的作用(尤其是它的那个最大的优点,可以在不刷新页面的情况下调用服务端的代码).正是因为这个特点,你就可以象在编写一个传统的C/S模式的程序一样,对数据库的数据进行处理了(我想大家一定很想知道具体应该如何来实现了,下面将给出一个具体的例子,调试这个破程序几乎快把我给累死,呵呵.)    从前面的描述可以看到,要使用RS技术就需要客户端和服务端满足下面两个条件:1.客户端

jquery 实现页面局部刷新ajax做法

这个方法就多了去了,常见的有以下几种: 下面介绍全页面刷新方法:有时候可能会用到 window.location.reload()刷新当前页面. parent.location.reload()刷新父亲对象(用于框架) opener.location.reload()刷新父窗口对象(用于单开窗口) top.location.reload()刷新最顶端对象(用于多开窗口) $.get方法,$.post方法,$.getJson方法,$.ajax方法如下 前两种使用方法基本上一样 复制代码 代码如下:

Jquery Ajax 提交表单 JSP页面局部刷新 javascript 中写的code不执行

问题描述 下面是我碰到的具体问题,一直很是郁闷!我贴下我的代码,如果解决了,小弟不甚感激...js 代码://ajax 执行成功的回调函数function showSuccess(data){alert('执行成功!!!');}function showError(){alert('出错啦!!!');}//ajax提交采购或者销售项function addGoodsItems(){if($("#goodsName").val() == ""){alert('货品不能

jsp中页面局部刷新

问题描述 层1   id="yi"层2  id="er"层3     id="san"现在有三个层 (数据都是用el表达式,从session总获取的数据),现在jsp页面请求了后台的类方法 改变了session中的数据 如何让层3这个层重新加载数据? 问题补充:<div id="san"> <c:forEach items="${sessionScope.sessvalue}" var=&

ASP.net页面局部刷新

问题描述 我想实现一个滚动条随数据库数据变化自己实时刷新,没有点击事件,怎么解决??求解<spanstyle="color:red"><asp:Labelid="count"runat="server"/></span><br/><li><spanstyle="color:red"><asp:Labelid="Label1"run