JQuery 又谈ajax局部刷新


Posted in jQuery onNovember 27, 2017

JQuery 再谈ajax局部刷新。

案例:

JQuery 又谈ajax局部刷新
JQuery 又谈ajax局部刷新
JQuery 又谈ajax局部刷新
JQuery 又谈ajax局部刷新

描述:

1. 点击登录则弹出登录对话框
2. 如果用户名密码不正确,则提示错误信息
3. 当输入信息正确,则刷新登录信息,显示用户名和退出按钮
4. 点击退出弹出提示信息,然后确定后再次刷新用户名,回到了第一幅图片的位置

那这些简单的操作,都需要做一些什么工作呢?

1. 加载登录/(用户名-退出)的页面
2. 点击登录连接,打开登录对话框
3. 登录form表单提交时,对信息进行验证。
4. 验证通过后,关闭对话框,同时刷新1中的页面,显示“用户名-退出”
5. 点击退出a标签时,登出成功后再次刷新1中的页面,显示“登录”

加载登录/(用户名-退出)的页面

<div id="login_tip" url="${ctx}/mem/initLoginTip"></div>

1. 给div一个id,用来做页面索引,使后面能够定位到此处。
2. 给一个url属性,使其在页面加载的时候向jfinal服务端获取对应信息,当然也就是为了局部刷新获取页面内容。

// 有url的div主动请求服务端获取数据
 $("div[url]", $p).each(function() {
 var $this = $(this);
 var url = $this.attr("url");
 if (url) {
 $this.ajaxUrl({
 type : "POST",
 url : url,
 callback : function() {
 }
 });
 }
 });

通过url来定位到DIV,然后获取url,准备发起ajax请求。

当然ajaxUrl方法先不要去关注太多,稍后会进一步解释。

点击登录连接,打开登录对话框

<a title="登录" href="${ctx}/mem/initLogin/${sessionScope.username.username}" rel="external nofollow" target="dialog" width="600">登录</a>

1. 增加属性target为dialog属性,当然如果你还没有关注本系列教程,那么你可以回顾一下来看看怎么通过a标签打开一个对话框,看看如何打开模态对话框。
2. 增加width属性,设置对话框的宽度。

当输入信息正确,则刷新登录信息,显示用户名和退出按钮

<form class="pop_login_form" action="${ctx}/mem/login?callbackType=closeCurrent&rel=login_tip" method="post" onsubmit="return validateCallback(this, dialogAjaxDone)">

1. 这个form表单的属性就很关键了,action中增加了两个参数“callbackType=closeCurrent”、“rel=login_tip”,callbackType指定对话框在登录成功后要关闭,而rel则指定关闭对话框后刷新的局部对象。
2. validateCallback你可以参照 jfinal与bootstrap的登录跳转实战,里面有详细的介绍。
3. 然后对于dialogAjaxDone,就需要重点说明以下,请看以下内容。

function dialogAjaxDone(json) {
 YUNM.ajaxDone(json);
 if (json[YUNM.keys.statusCode] == YUNM.statusCode.ok || json[YUNM.keys.statusCode] == YUNM.statusCode.info) {
 if (json.rel) {// 指定对应的div进行数据加载
 var url = json.forwardUrl, options = {
 elementId : json.rel
 };
 var op = $.extend({
 data : {},
 elementId : "",
 callback : null
 }, options);

 var $panel = $("#" + op.elementId);

 if (!url) {
 url = $panel.attr("url");
 }

 if (url) {
 $panel.ajaxUrl({
 type : "POST",
 url : url,
 data : op.data,
 callback : function(response) {
 if ($.isFunction(op.callback))
 op.callback(response);
 }
 });
 }
 }

 if ("closeCurrent" == json.callbackType) {
 close_pop();
 } else if ("closeCurrentThenForward" == json.callbackType) {
 close_pop();
 if (json.forwardUrl) {
 location.href = common.ctx + json.forwardUrl;
 return;
 }
 }
 }
}

1. 这里请看“if (json.rel) {”中的这串代码,该处通过json.rel,获取a标签上的系列参数,然后再次调用ajaxUrl方法,用来做局部刷新。

到了这里,就不得不说ajaxUrl这个方法了

(function($){
 // DWZ set regional
 $.setRegional = function(key, value){
 if (!$.regional) $.regional = {};
 $.regional[key] = value;
 };

 $.fn.extend({
 initUI: function(){
 return this.each(function(){
 if($.isFunction(initUI)) initUI(this);
 });
 },
 loadUrl: function(url,data,callback){
 $(this).ajaxUrl({url:url, data:data, callback:callback});
 },
 ajaxUrl: function(op){
 var $this = $(this);

 $this.trigger(YUNM.eventType.pageClear);

 $.ajax({
 type: op.type || 'GET',
 url: op.url,
 data: op.data,
 cache: false,
 success: function(response){
 var json = YUNM.jsonEval(response);

 if (json[YUNM.keys.statusCode]==YUNM.statusCode.error){
 if (json[YUNM.keys.message]) $.showErr(json[YUNM.keys.message]);
 } else {
 $this.html(response).initUI();
 if ($.isFunction(op.callback)) op.callback(response);
 }
 },
 error: YUNM.ajaxError,
 statusCode: {
 503: function(xhr, ajaxOptions, thrownError) {
 $.showErr("服务器当前负载过大或者正在维护!" || thrownError);
 }
 }
 });
 },

 });

通过ajax请求,向jfinal端发起请求,然后接收对应的response,根据response状态,我们将对应的页面渲染内容显示到局部DIV中。

jfinal端就很简单了

public void initLoginTip() {
 logger.info("初始化登录/退出页面");
 render("login_tip.jsp");
 }

渲染到对应组件页面就OK了。

说到这,登录的局部刷新就完成了,只要你注意到对应的方法就好了。

点击退出a标签时,登出成功后再次刷新1中的页面,显示“登录”

对于退出,你当然还是可以参照jfinal与bootstrap的登出实战。

对于ajaxDone方法,你可以参照dialogAjaxDone方法。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
jQuery+ajax实现局部刷新的两种方法
Jun 08 jQuery
JQuery.dataTables表格插件添加跳转到指定页
Jun 09 jQuery
使用jQuery实现购物车结算功能
Aug 15 jQuery
jQuery中ajax获取数据赋值给页面的实例
Dec 31 jQuery
jQuery实现通过方向键控制div块上下左右移动的方法【测试可用】
Apr 26 jQuery
jQuery md5加密插件jQuery.md5.js用法示例
Aug 24 jQuery
jquery获取file表单选择文件的路径、名字、大小、类型
Jan 18 jQuery
基于jQuery实现挂号平台首页源码
Jan 06 jQuery
jQuery实现王者荣耀手风琴效果
Jan 17 jQuery
jquery实现拖拽添加元素功能
Dec 01 jQuery
jquery实现拖拽小方块效果
Dec 10 jQuery
jQuery treeview树形结构应用
Mar 24 jQuery
jQuery Datatables表头不对齐的解决办法
Nov 27 #jQuery
javaScript和jQuery自动加载简单代码实现方法
Nov 24 #jQuery
jquery实现回车键触发事件(实例讲解)
Nov 21 #jQuery
jQuery实现所有验证通过方可提交的表单验证
Nov 21 #jQuery
jquery-file-upload 文件上传带进度条效果
Nov 21 #jQuery
jquery ajaxfileupload异步上传插件
Nov 21 #jQuery
jquery中有哪些api jQuery主要API
Nov 20 #jQuery
You might like
PHP 数组教程 定义数组
2009/10/23 PHP
PHP 文件编程综合案例-文件上传的实现
2013/07/03 PHP
php使用codebase生成随机数
2014/03/25 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
2015/07/04 PHP
解读PHP的Yii框架中请求与响应的处理流程
2016/03/17 PHP
简单理解PHP的面向对象编程方式
2016/05/17 PHP
PHP实现负载均衡下的session共用功能
2018/04/17 PHP
如何优雅的使用 laravel 的 validator验证方法
2018/11/11 PHP
Jquery getJSON方法详细分析
2013/12/26 Javascript
js获取隐藏元素宽高的实现方法
2016/05/19 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
微信小程序  自定义创建详细介绍
2016/10/27 Javascript
使用Angular.js实现简单的购物车功能
2016/11/21 Javascript
Node.js连接postgreSQL并进行数据操作
2016/12/18 Javascript
Javascript 实现计算器时间功能详解及实例(二)
2017/01/08 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
easyui简介_动力节点Java学院整理
2017/07/14 Javascript
JavaScript根据json生成html表格的示例代码
2018/10/24 Javascript
react写一个select组件的实现代码
2019/04/03 Javascript
layer提示框添加多个按钮选择的实例
2019/09/12 Javascript
js实现移动端吸顶效果
2020/01/08 Javascript
原生js+canvas实现下雪效果
2020/08/02 Javascript
Python调用微信公众平台接口操作示例
2017/07/08 Python
Python之pandas读写文件乱码的解决方法
2018/04/20 Python
对Python中数组的几种使用方法总结
2018/06/28 Python
Python Pandas分组聚合的实现方法
2019/07/02 Python
Django上线部署之IIS的配置方法
2019/08/22 Python
python根据时间获取周数代码实例
2019/09/30 Python
基于Django实现日志记录报错信息
2019/12/17 Python
没编程基础可以学python吗
2020/06/17 Python
美术教师岗位职责
2014/03/18 职场文书
贯彻落实“八项规定”思想汇报
2014/09/13 职场文书
品质保证书格式
2015/02/28 职场文书
2016庆祝国庆67周年宣传语
2015/11/25 职场文书
MyBatis-Plus 批量插入数据的操作方法
2021/09/25 Java/Android
Java完整实现记事本代码
2022/06/16 Java/Android