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 相关文章推荐
简单几行JS Code实现IE邮件转发新浪微博
Jul 03 Javascript
jQuery表格插件datatables用法总结
Sep 05 Javascript
jquery+easeing实现仿flash的载入动画
Mar 10 Javascript
JavaScript获取网页中第一个链接ID的方法
Apr 03 Javascript
Bootstrap Fileinput文件上传组件用法详解
May 10 Javascript
EasyUI Combobox设置默认值 获取text的方法
Nov 28 Javascript
AngularJS 霸道的过滤器小结
Apr 26 Javascript
JS中type=&quot;button&quot;和type=&quot;submit&quot;的区别
Jul 04 Javascript
解决vue2.x中数据渲染以及vuex缓存的问题
Jul 13 Javascript
ES6中的rest参数与扩展运算符详解
Jul 18 Javascript
Vue的轮播图组件实现方法
Mar 03 Javascript
详解Vue中的Props与Data细微差别
Mar 02 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学习笔记 用户注册模块用户类以及验证码类
2011/09/20 PHP
解决nginx不支持thinkphp中pathinfo的问题
2015/07/21 PHP
php+ajax 实现输入读取数据库显示匹配信息
2015/10/08 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
2016/03/17 PHP
PHP 配置后台登录以及模板引入
2017/01/24 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
2018/04/27 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
认识延迟时间为0的setTimeout
2008/05/16 Javascript
JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
2011/07/04 Javascript
JS 日期比较大小的简单实例
2014/01/13 Javascript
JS显示日历和天气的方法
2016/03/01 Javascript
深入理解Node.js 事件循环和回调函数
2016/11/02 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
2017/04/10 Javascript
详解webpack分离css单独打包
2017/06/21 Javascript
vue页面加载闪烁问题的解决方法
2018/03/28 Javascript
使用Vue自定义指令实现Select组件
2018/05/24 Javascript
不得不知的ES6小技巧
2018/07/28 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
解决Vue动态加载本地图片问题
2019/10/09 Javascript
基于python(urlparse)模板的使用方法总结
2017/10/13 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
2018/10/14 Python
python爬虫获取百度首页内容教学
2018/12/23 Python
OpenCV 轮廓检测的实现方法
2019/07/03 Python
劳动模范事迹材料
2014/01/19 职场文书
合同意向书范本
2014/07/30 职场文书
大学同学会活动方案
2014/08/20 职场文书
运动会班级前导词
2015/07/20 职场文书
煤矿安全生产管理协议书
2016/03/22 职场文书
基于Redis实现分布式锁的方法(lua脚本版)
2021/05/12 Redis
如何用Python搭建gRPC服务
2021/06/30 Python
python flappy bird小游戏分步实现流程
2022/02/15 Python
vue项目配置sass及引入外部scss文件
2022/04/14 Vue.js
Go gRPC进阶教程gRPC转换HTTP
2022/06/16 Golang
element tree树形组件回显数据问题解决
2022/08/14 Javascript