博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过回调函数的理解来进一步理解ajax及其注意的用法
阅读量:6069 次
发布时间:2019-06-20

本文共 2641 字,大约阅读时间需要 8 分钟。

假如你现在还在为自己的技术担忧,假如你现在想提升自己的工资,假如你想在职场上获得更多的话语权,假如你想顺利的度过35岁这个魔咒,假如你想体验BAT的工作环境,那么现在请我们一起开启提升技术之旅吧,详情请点击

一,再一次理解回调函数

1 (function($){ 2     $.fn.shadow = function(opts){ 3         //定义的默认的参数 4         var defaults = { 5             copies: 5, 6             opacity:0.1, 7             //回调函数 8  copyOffset:function(index){ 9                 return{x:index,y:index};10             }11         };12         //将opts的内容合并到default中。13         var options = $.extend(defaults,opts);14         return this.each(function(){15             var $originalElement  = $(this);16             //设置参数对象17             for(var i=0;i

 

 在这里我们注意了

 

copyOffset:function(index){

return {x:-index,y:-2 * index};
}

就是一个回调函数,当代吗执行到

39行时,在这里并没有往return {x:-index,y:-2 * index};这行代码走,在这里只是一个赋值的过程,这时候代码会继续往下走,走到alert("先于copyOffset函数执行的");这一行的,至于什么时候执行alert("我被执行了");就是回调函数执行完了之后在执行的但是它一定是在  先于copyOffset函数执行的  之后执行的。

 

至于回调函数里面的执行规律请见

二,理解ajax

反面案例

1 $(document).ready(function(){ 2     $('#txt').val('000000');//给文本框初始值 3     $('#btn01').bind('click',function(){ 4         $.ajax({ 5             type: "POST", 6             url: "<%=request.getContextPath() %>/vumssmer/vmerservice!studyCallBack.do", 7             data:'', 8             success:function(msg){ 9                 console.log('msg.vflag:' + msg.vflag);10                 console.log('msg.vmsg:' + msg.vmsg);11                 $('#txt').val(msg.vflag);12                 outerdata = msg.vflag;13             }14         });    15         if (outerdata == 'true'){16             console.log('文本框内容是:' + $('#txt').val());17             console.log('公共变量的值是:' + outerdata);18             console.log('yes');19         }else{20             console.log('文本框内容是:' + $('#txt').val());21             console.log('公共变量的值是:' + outerdata);22             console.log('no');23         }24     });25 });

所谓的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){}类似这种的情况断点就会直接跳过去的,假如在后台打断点的时间足够多的话就不会跳过去,一般情况下都会跳过去的,这就是回调函数的原因当执行到这一行的时候只是赋值的过程,而回调的函数还没有返回要求的值的,这时候就有点类似与多线程就会往下走的。

同样,我们也可以通过前台断点假如碰到一个函数就跳过去了,那它一定是回调函数。

 

转载地址:http://eeygx.baihongyu.com/

你可能感兴趣的文章
Linux 安装oracle内核参数
查看>>
Oracle DG 逻辑Standby数据同步性能优化
查看>>
exchange 2010 队列删除
查看>>
android实用测试方法之Monkey与MonkeyRunner
查看>>
「翻译」逐步替换Sass
查看>>
H5实现全屏与F11全屏
查看>>
处理excel表的列
查看>>
枸杞子也能控制脂肪肝
查看>>
Excuse me?这个前端面试在搞事!
查看>>
C#数据采集类
查看>>
quicksort
查看>>
检验函数运行时间
查看>>
【BZOJ2019】nim
查看>>
Oracle临时表空间满了的解决办法
查看>>
四部曲
查看>>
LINUX内核调试过程
查看>>
【HDOJ】3553 Just a String
查看>>
Java 集合深入理解(7):ArrayList
查看>>
2019年春季学期第四周作业
查看>>
linux环境配置
查看>>