jQuery Tips 为AJAX回调函数传递额外参数的方法


Posted in Javascript onDecember 28, 2010

具体到这个例子,我们希望button1和button2点击之后,用AJAX的方式取example.html的内容,然后动态更新页面的id=callbackdemo3的div
HTML如下:

<div id="callbackdemo1"> 
<button id="button1">ajax load1</button><br/> 
</div> 
<div id="callbackdemo2"> 
<button id="button2">ajax load2</button><br/> 
</div> 
<div id="callbackdemo3" class="log"></div> 
<button onclick="$('.log').html('');">clear</button>

第一种做法:
适用于最简单的情况,也是比较直观的做法,就是在ajax回调函数中,使用jQuery的id选择器$(“#callbackdemo3″)得到id为callbackdemo3的div后更新其HTML内容
$("#callbackdemo1>#button1").click( 
function load(){ 
$.get("example.html",{ 'param[]': ["var1", "var2"] }, 
function f1(data, textStatus, XMLHttpRequest) 
{ 
$("#callbackdemo3").html(data); 
} 
); 
} 
);

第二种做法:
定义好一个接受额外参数的回调函数,然后在默认回调函数的内容调用这个预先定义好的回调函数
这样就能达到传递额外参数的目的了,较之第一种方法,此方法能比较方便的利用各个回调函数的上下文。
function callback_with_extraParam(data,param) 
{ 
param.html(data); 
} 
$("#callbackdemo2>#button2").click( 
function load(){ 
var extraParam = $("#callbackdemo3") 
$.get("example.html",{ 'param[]': ["var1", "var2"] }, 
function f2(data) 
{ 
callback_with_extraParam(data,extraParam); 
} 
); 
} 
);

对于额外参数的重要性,不妨看一个稍微复杂一点点的HTML情况,我们希望更新button3下面的那个div的HTML,这个div没有id,那么如何做呢?
<div id="callback_complexdemo"> 
<button id="button3">ajax load3</button><br/> 
<button onclick="$('div',$(this).closest('div')).html('');">clear</button><br/> 
<div></div> 
</div>

当然使用#callback_complexdemo>div也是可以的,但是如果是更加复杂的HTML页面呢?如果没有id=callback_complexdemo呢?嵌套很深呢?
这种情况下,我们就需要有效利用上下文参数这个特性了。
在click的事件处理函数load()中,我们可以方便的获得当前元素的位置var whereAmI = $(this);
这个whereAmI是个jQuery对象,然后在AJAX回调函数f3中,我们利用whereAmI即被点中的这个button想办法去获得想要的div
这一行代码新手有的人看不懂:$('div',$(whereAmI).closest('div'))
首先$closest_parent_div = $(whereAmI).closest('div')即查询获得whereAmI最近的父div对象
然后$('div',$closest_parent_div) 即在最近的父div对象这个上下文中,查找内部的div对象
$("#callback_complexdemo>#button3").click( 
function load(){ 
var whereAmI = $(this); 
$.get("example.html",{ 'param[]': ["var1", "var2"] }, 
function f3(data) 
{ 
console.log(whereAmI); 
$('div',$(whereAmI).closest('div')).html(data); 
} 
); 
} 
);

希望通过这个小例子,能让大家学会如何给AJAX回调函数传递额外参数,以及实用且重要的上下文参数。
Javascript 相关文章推荐
jquery.boxy弹出框(后隔N秒后自动隐藏/自动跳转)
Jan 15 Javascript
js实现宇宙星空背景效果的方法
Mar 03 Javascript
JavaScript程序设计之JS调试
Dec 09 Javascript
Express URL跳转(重定向)的实现方法
Apr 07 Javascript
Vue.js实现价格计算器功能
Mar 30 Javascript
laydate日历控件使用方法详解
Nov 20 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
May 17 Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
Aug 27 Javascript
微信小程序云开发 生成带参小程序码流程
May 18 Javascript
js实现html滑动图片拼图验证
Jun 24 Javascript
javascript实现倒计时关闭广告
Feb 09 Javascript
Canvas三种动态画圆实现方法说明(小结)
Apr 16 Javascript
JavaScript去掉空格的方法集合
Dec 28 #Javascript
js常用排序实现代码
Dec 28 #Javascript
深入理解Javascript闭包 新手版
Dec 28 #Javascript
prettify 代码高亮着色器google出品
Dec 28 #Javascript
Pro JavaScript Techniques学习笔记
Dec 28 #Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
Dec 28 #Javascript
JavaScript动态调整TextArea高度的代码
Dec 28 #Javascript
You might like
一个不易被发现的PHP后门代码解析
2014/07/05 PHP
PHP实现文件下载详解
2014/11/27 PHP
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
PHP缓冲区用法总结
2016/02/14 PHP
JavaScript 不只是脚本
2007/05/30 Javascript
javascript:void(0)是什么意思示例介绍
2013/11/17 Javascript
本人自用的global.js库源码分享
2015/02/28 Javascript
使用jquery动态加载Js文件和Css文件
2015/10/24 Javascript
使用CoffeeScrip优美方式编写javascript代码
2015/10/28 Javascript
JS模仿手机端九宫格登录功能实现代码
2016/04/28 Javascript
boostrap模态框二次弹出清空原有内容的方法
2018/08/10 Javascript
基于vue框架手写一个notify插件实现通知功能的方法
2019/03/31 Javascript
vue-amap根据地址回显地图并mark的操作
2020/11/03 Javascript
Python中使用Queue和Condition进行线程同步的方法
2016/01/19 Python
Python基于动态规划算法解决01背包问题实例
2017/12/06 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
python web框架 django wsgi原理解析
2019/08/20 Python
Python Django 简单分页的实现代码解析
2019/08/21 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
匡威比利时官网:Converse Belgium
2017/04/13 全球购物
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
5个HTML5的常用本地存储方式详解与介绍
2021/03/27 HTML / CSS
教育学专业毕业生的自我鉴定
2013/11/26 职场文书
找工作最新求职信
2013/12/22 职场文书
2014年上半年工作自我评价
2014/01/18 职场文书
收银员岗位职责
2014/02/07 职场文书
2014领导干部学习焦裕禄同志先进事迹思想汇报
2014/09/19 职场文书
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
2015年公务员个人工作总结
2015/04/24 职场文书
最感人的道歉情书
2015/05/12 职场文书
2015年安全生产月工作总结
2015/07/27 职场文书
Pytorch distributed 多卡并行载入模型操作
2021/06/05 Python
电频谱管理的原则是什么
2022/02/18 无线电
Python&Matlab实现樱花的绘制
2022/04/07 Python
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang
python如何将mat文件转为png
2022/07/15 Python