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 validator 插件增加日期比较方法
Feb 21 Javascript
在chrome中window.onload事件的一些问题
Mar 01 Javascript
js使用栈来实现10进制转8进制与取除数及余数
Jun 11 Javascript
javaScript实现可缩放的显示区效果代码
Oct 26 Javascript
基于BootStrap Metronic开发框架经验小结【二】列表分页处理和插件JSTree的使用
May 12 Javascript
jquery网页日历显示控件calendar3.1使用详解
Nov 24 Javascript
jquery插件锦集【推荐】
Dec 16 Javascript
Angular在一个页面中使用两个ng-app的方法
Feb 20 Javascript
浅谈实现vue2.0响应式的基本思路
Feb 13 Javascript
vue实现键盘输入支付密码功能
Aug 18 Javascript
javascript实现贪吃蛇经典游戏
Apr 10 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
Jun 04 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
mysql5详细安装教程
2007/01/15 PHP
使用openssl实现rsa非对称加密算法示例
2014/01/24 PHP
windows下安装php的memcache模块的方法
2015/04/07 PHP
php使用escapeshellarg时中文被过滤的解决方法
2016/07/10 PHP
phpcms配置列表页以及获得文章发布时间
2017/07/04 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
javascript让setInteval里的函数参数中的this指向特定的对象
2010/01/31 Javascript
使用JavaScript修改浏览器URL地址栏的实现代码
2013/10/21 Javascript
qq悬浮代码(兼容各个浏览器)
2014/01/29 Javascript
js实现a标签超链接提交form表单的方法
2015/06/24 Javascript
jQuery实现加入收藏夹功能(主流浏览器兼职)
2016/12/24 Javascript
JavaScript 总结几个提高性能知识点(推荐)
2017/02/20 Javascript
es6学习笔记之Async函数的使用示例
2017/05/11 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
微信小程序 转发功能的实现
2017/08/04 Javascript
node的process以及child_process模块学习笔记
2018/03/06 Javascript
vue路由懒加载的实现方法
2018/03/12 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
2018/08/13 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
vue-cli的工程模板与构建工具详解
2018/09/27 Javascript
jquery将json转为数据字典的实例代码
2019/10/11 jQuery
js验证密码强度解析
2020/03/18 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
js实现鼠标滑动到某个div禁止滚动
2020/09/17 Javascript
[47:18]完美世界DOTA2联赛循环赛 IO vs FTD BO2第一场 11.05
2020/11/06 DOTA
深入浅析Python中join 和 split详解(推荐)
2016/06/30 Python
Python代码解决RenderView窗口not found问题
2016/08/28 Python
python中安装模块包版本冲突问题的解决
2017/05/02 Python
python DataFrame 修改列的顺序实例
2018/04/10 Python
docker django无法访问redis容器的解决方法
2019/08/21 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
Python多进程编程multiprocessing代码实例
2020/03/12 Python
python如何建立全零数组
2020/07/19 Python
阿玛尼意大利官网:Armani意大利
2018/10/30 全球购物
波兰最大的宠物用品网上商店:FERA.PL
2019/08/11 全球购物
Python中22个万用公式的小结
2021/07/21 Python