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 相关文章推荐
JS jQuery使用正则表达式去空字符的简单实现代码
May 20 jQuery
jquery实现左右轮播图效果
Sep 28 jQuery
jQuery选择器之子元素过滤选择器
Sep 28 jQuery
jquery根据name取得select选中的值实例(超简单)
Jan 25 jQuery
基于jQuery.i18n实现web前端的国际化
May 04 jQuery
jQuery pagination分页示例详解
Oct 23 jQuery
jQuery+Datatables实现表格批量删除功能【推荐】
Oct 24 jQuery
jquery获取img的src值实例介绍
Jan 16 jQuery
在Vue项目中引入JQuery-ui插件的讲解
Jan 27 jQuery
jQuery实现的网站banner图片无缝轮播效果完整实例
Jan 28 jQuery
jQuery zTree树插件的使用教程
Aug 16 jQuery
Jquery 获取相同NAME 或者id删除行操作
Aug 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+MySQL 手工注入语句大全 推荐
2009/10/30 PHP
mysql,mysqli,PDO的各自不同介绍
2012/09/19 PHP
PHP实现的比较完善的购物车类
2014/12/02 PHP
PHP isset()与empty()的使用区别详解
2017/02/10 PHP
Laravel下生成验证码的类
2017/11/15 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
使用IE的地址栏来辅助调试Web页脚本
2007/03/08 Javascript
原型方法的不同写法居然会影响调试的解决方法
2007/03/08 Javascript
Javascript中的数学函数
2007/04/04 Javascript
在jquery中处理带有命名空间的XML数据
2011/06/13 Javascript
JavaScript Array对象扩展indexOf()方法
2014/05/09 Javascript
js操作IE浏览器弹出浏览文件夹可以返回目录路径
2014/07/14 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
2015/05/25 Javascript
JQuery日历插件My97DatePicker日期范围限制
2016/01/20 Javascript
Jquery实现的简单轮播效果【附实例】
2016/04/19 Javascript
JS实现为动态添加的元素增加事件功能示例【基于事件委托】
2018/03/21 Javascript
vue 中的keep-alive实例代码
2018/07/20 Javascript
微信小程序实现登录遮罩效果
2018/11/01 Javascript
浅谈JavaScript中this的指向更改
2020/07/28 Javascript
[03:30]完美盛典趣味短片 CSGO2019年度名场面
2019/12/07 DOTA
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
2017/09/20 Python
python单例模式实例解析
2018/08/28 Python
详解django2中关于时间处理策略
2019/03/06 Python
python实现栅栏加解密 支持密钥加密
2019/03/20 Python
Python3实现汉语转换为汉语拼音
2019/07/08 Python
django foreignkey外键使用的例子 相当于left join
2019/08/06 Python
Python通过VGG16模型实现图像风格转换操作详解
2020/01/16 Python
Python生成随机验证码代码实例解析
2020/06/09 Python
Anaconda使用IDLE的实现示例
2020/09/23 Python
html5唤醒APP小记
2019/03/27 HTML / CSS
老公给老婆的保证书
2014/04/28 职场文书
影视广告专业求职信
2014/09/02 职场文书
离婚协议书范文2014
2014/10/16 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
大学生毕业个人总结
2015/02/15 职场文书
mysql查询结果实现多列拼接查询
2022/04/03 MySQL