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 相关文章推荐
JsEasy简介 JsEasy是什么?与下载
Mar 07 Javascript
JavaScript中的Primitive对象封装介绍
Dec 31 Javascript
详解AngularJS控制器的使用
Mar 09 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
Apr 16 Javascript
jQuery表单验证之密码确认
May 22 jQuery
vue2.0 elementUI制作面包屑导航栏
Feb 22 Javascript
Vue.js中的computed工作原理
Mar 22 Javascript
详解各版本React路由的跳转的方法
May 10 Javascript
浅析Vue.js 中的条件渲染指令
Nov 19 Javascript
JS实现判断数组是否包含某个元素示例
May 24 Javascript
vue中的v-model原理,与组件自定义v-model详解
Aug 04 Javascript
react如何快速设置文件路径别名
Apr 28 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数据入库前清理 注意php intval与mysql的int取值范围不同
2010/12/12 PHP
PHP 第三节 变量介绍
2012/04/28 PHP
php中防止恶意刷新页面的代码小结
2012/10/31 PHP
PHPExcel简单读取excel文件示例
2016/05/26 PHP
thinkPHP5.0框架URL访问方法详解
2017/03/18 PHP
让浏览器非阻塞加载javascript的几种方法小结
2011/04/25 Javascript
Jquery通过JSON字符串创建JSON对象
2014/08/24 Javascript
JavaScript动态改变div属性的实现方法
2015/07/22 Javascript
老生常谈 js中this的指向
2016/06/30 Javascript
使用JavaScript解决网页图片拉伸问题(推荐)
2016/11/25 Javascript
详解浏览器渲染页面过程
2017/02/09 Javascript
nodejs模块学习之connect解析
2017/07/05 NodeJs
实例分析JS与Node.js中的事件循环
2017/12/12 Javascript
详解ES6语法之可迭代协议和迭代器协议
2018/01/13 Javascript
浅谈super-vuex使用体验
2018/06/25 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
2019/04/10 Javascript
浅谈微信小程序列表埋点曝光指南
2019/10/15 Javascript
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
[55:16]Mski vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python中的模块和包概念介绍
2015/04/13 Python
Python编程之event对象的用法实例分析
2017/03/23 Python
老生常谈Python基础之字符编码
2017/06/14 Python
Python实现读取txt文件并画三维图简单代码示例
2017/12/09 Python
彻彻底底地理解Python中的编码问题
2018/10/15 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
对python:print打印时加u的含义详解
2018/12/15 Python
python+pyqt5实现24点小游戏
2019/01/24 Python
python+opencv3生成一个自定义纯色图教程
2020/02/19 Python
django rest framework serializers序列化实例
2020/05/13 Python
python简单实现9宫格图片实例
2020/09/03 Python
关于Java String的一道面试题
2013/09/29 面试题
介绍一下HDLC(High-Level Data Link Control)高层数据链路协议
2012/01/21 面试题
《商鞅南门立木》教学反思
2014/02/16 职场文书
机票销售员态度不好检讨书
2014/09/27 职场文书
旅游安全责任协议书
2016/03/22 职场文书