通过回调函数的理解来进一步理解ajax及其注意的用法
一,再一次理解回调函数
(function($){
$.fn.shadow = function(opts){
//定义的默认的参数
var defaults = {
copies: 5,
opacity:0.1,
//回调函数
copyOffset:function(index){
return{x:index,y:index};
}
};
//将opts的内容合并到default中。
var options = $.extend(defaults,opts);
return this.each(function(){
var $originalElement = $(this);
//设置参数对象
for(var i=0;i<options.copies;i++)
{
var offset = options.copyOffset(i);
$originalElement
.clone()
.css({
position:'absolute',
left:$originalElement.offset().left + offset.x,
top:$originalElement.offset().top + offset.y,
margin:0,
zIndex:-1,
//设置参数对象
opacity:options.opacity
})
.appendTo('body');
}
});
};
})(jQuery);
$(document).ready(function(){
$('h1').shadow({
copies:5,
39 copyOffset:function(index){
alert("我被执行了");
return {x:-index,y:-2 * index};
}
alert("先于copyOffset函数执行的");
});
});
在这里我们注意了
copyOffset:function(index){
return {x:-index,y:-2 * index};
}
就是一个回调函数,当代吗执行到
39行时,在这里并没有往return {x:-index,y:-2 * index};这行代码走,在这里只是一个赋值的过程,这时候代码会继续往下走,走到alert("先于copyOffset函数执行的");这一行的,至于什么时候执行alert("我被执行了");就是回调函数执行完了之后在执行的但是它一定是在 先于copyOffset函数执行的 之后执行的。
至于回调函数里面的执行规律请见
jquery回调函数的一个案例
二,理解ajax
反面案例
$(document).ready(function(){
$('#txt').val('000000');//给文本框初始值
$('#btn01').bind('click',function(){
$.ajax({
type: "POST",
url: "<%=request.getContextPath() %>/vumssmer/vmerservice!studyCallBack.do",
data:'',
success:function(msg){
console.log('msg.vflag:' + msg.vflag);
console.log('msg.vmsg:' + msg.vmsg);
$('#txt').val(msg.vflag);
outerdata = msg.vflag;
}
});
if (outerdata == 'true'){
console.log('文本框内容是:' + $('#txt').val());
console.log('公共变量的值是:' + outerdata);
console.log('yes');
}else{
console.log('文本框内容是:' + $('#txt').val());
console.log('公共变量的值是:' + outerdata);
console.log('no');
}
});
});
所谓的ajax就是异步的,它的定义是在不刷新页面的情况下,来动态的修改数据,或者说去查数据库,
这里最关键的就是ajax中应用了回调函数的原因,单代码走到 success:function(msg){}这一步的时候,存储的函数是不会被调用的,因为这只是一个赋值操作。就会直接跳过这个方法体里面的信息而,直接往下走,执行方法体外面的代码,
这时候当多线程执行完success:function(msg)会把值赋值到里面去的,至于什么时候执行完就要看ajax配置的url里面的代码处理量的大小了。
这样的好处有:
(1)可以让实现方,根据回调方的多种形态进行不同的处理和操作。(ASIHttpRequest)
(2)可以让实现方,根据自己的需要定制回调方的不同形态。(UITableView)
(3)可以将耗时的操作隐藏在回调方,不影响实现方其它信息的展示。
(4)让代码的逻辑更加集中,更加易读。
Ajax里的回调函数只是我们赋值给XMLHttpRequest对象的回调函数,它的执行和我们所写的调用ajax函数无关。
实际运用中如果我们想在执行完ajax请求后,根据请求结果执行相关的逻辑,那么请把逻辑写在ajax的回调函数里,只有这样才能让代码按业务逻辑正常运行。
所以通过上面的分析我们可以得出答案,当我们要用ajax返回的值时,一定要把处理的方法写在ajax方法里面来。而不是像上面的案例那样。
如果想详细的理解ajax和回调函数请见,
所以我们有时候可以看到当在前台打断点的时候,一旦碰到success:function(msg){}类似这种的情况断点就会直接跳过去的,假如在后台打断点的时间足够多的话就不会跳过去,一般情况下都会跳过去的,这就是回调函数的原因当执行到这一行的时候只是赋值的过程,而回调的函数还没有返回要求的值的,这时候就有点类似与多线程就会往下走的。
同样,我们也可以通过前台断点假如碰到一个函数就跳过去了,那它一定是回调函数。
通过回调函数的理解来进一步理解ajax及其注意的用法的更多相关文章
- js中回调函数(callback)的一些理解
前言 我个人在学习Node.js相关知识时遇到了回调函数这个概念,虽然之前已经在c,c++等编程语言中用到过它,但还一直未对其机制有深入了解,这次就来好好谈一下它. 概念理解 百度对它的解释是回调函数 ...
- PHP 回调函数call_user_func和 call_user_func_array()的理解
call_user_func(function,param); // 第一个参数是回调函数的函数名,第二个参数是参数 call_user_func函数类似于一种特别的调用函数的方法.其主要有以下的类型 ...
- ajax回调函数,全局变量赋值后,ajax外无法获取的解决
1 ajax回调函数内,function的执行与ajax外是异步的,常导致全局变量赋值后,再次使用此变量人无法获取. 所以,可以把需要的步骤,独立放在functuon中,在ajax回调函数中执行.可较 ...
- 理解和使用 JavaScript 中的回调函数
理解和使用 JavaScript 中的回调函数 标签: 回调函数指针js 2014-11-25 01:20 11506人阅读 评论(4) 收藏 举报 分类: JavaScript(4) 目录( ...
- [转]理解与使用Javascript中的回调函数
在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用.既然函数实际上是对象:它们能被“存储”在变量中,能作为函数参数被传递,能在函数中被创建,能从函数中返回. 因 ...
- 【JavaScript】理解与使用Javascript中的回调函数
在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用.既然函数实际上是对象:它们能被“存储”在变量中,能作为函数参数被传递,能在函数中被创建,能从函数中返回. 因 ...
- 理解javascript中的回调函数(callback)【转】
在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...
- 理解与使用Javascript中的回调函数
在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用.既然函数实际上是对象:它们能被“存储”在变量中,能作为函数参数被传递,能在函数中被创建,能从函数中返回. 因 ...
- 对c语言回调函数的理解
对于回调函数,可以简单的理解为一种特别的函数调用方法,我们可以对比一下回调函数与普通函数在调用方法上的区别. 1. 普通函数调用 一般为实现方在其函数体执行过程中直接调用. 代码示例: #includ ...
随机推荐
- 济南清北学堂游记 Day 7.
完结撒花? 最后的模拟赛与讲题.大家似乎仍然乐在其中,虽然看评测结果,仍然是满地红. 其实到了最后已经是没有多少可写的了..... 一个精彩的地方是晚上填表的时候,群里炸锅了已经.到处都在刷CCL老师 ...
- BZOJ 3720: Gty的妹子树 [树上size分块]
传送门 题意: 一棵树,询问子树中权值大于$k$的节点个数,修改点权值,插入新点:强制在线 一开始以为询问多少种不同的权值,那道CF的强制在线带修改版,直接吓哭 然后发现看错了这不一道树上分块水题.. ...
- POJ 2185 Milking Grid [KMP]
Milking Grid Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 8226 Accepted: 3549 Desc ...
- http协议重点
https://www.cnblogs.com/ranyonsue/p/5984001.html HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议) ...
- js中sum(2,3,4)和sum(2)(3)(4)都返回9并要求扩展性
网上有很多关于sum(1)(2)(3),sum(1,2,3)之类的面试题要求输出相同的结果6并要求可以满足扩展,即有多个参数时也能符合题设的要求,所以自己写了部分例子可以大概满足这些面试题的要求 &l ...
- python中常见的三种句型if,while,for
1.if语句: 特别说明:条件后面的冒号不能少,同样必须是英文字符. 特别特别说明:if内部的语句需要有一个统一的缩进,一般用4个空格.python用这种方法替代了其他很多编程语言中的{}. num= ...
- typedef void(*Fun)(void);
typedef void(*Fun)(void); 函数类似于数组,函数名就是它的首地址: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...
- 升级 phpStudy 中 MySQL 版本至 5.7.17
由于本地用的集成环境是 phpStudy 2016,没有找到升级 MySQL 版本的选项,所以自己升级一下. 从官网上下载高版本的 MySQL :https://dev.mysql.com/dow ...
- 应用负载均衡之LVS(三):使用ipvsadm以及详细分析VS/DR模式
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- XAMPP环境访问非Web DocumentRoot下绝对路径
假设你的XAMPP网站文档根目录在C:/xampp/apache/htdocs/下面,那么访问这个目录下的文件是很直接的. 但是有时候需要把用户上传文件指定到特殊目录,比如E盘,那么就需要用户能够访问 ...