`
openxtiger
  • 浏览: 148356 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

[Js++开发历程] Jquery的$.ajax().done().fail()之不可能的事情

    博客分类:
  • Js++
 
阅读更多

1.9 Jquery的$.ajax().done().fail()之不可能的事情

 

  Jquery的开发人员的确让人折服,当我看到以上的代码时,感觉非常疑惑。 所有的ajax代码都在ajax函数中运行,为什么done和fail的中的函数能被回调呢?

  很多人会认为Jquery的Deferred的效果,其实不然,因为ajax如果采用同步模式的,就会等待执行结果,根本等不了执行done函数注入。其实最为奥秘之处在于$.Callbacks的运行机制

  $.Callbacks如果memory时,会记录上一次运行的结果。

* memory: will keep track of previous values and will call any callback added

* after the list has been fired right away with the latest "memorized"

* values (like a Deferred)

 

所以ajax的执行结果会存储在 memory中,当调用done()注册回调函数,会立即执行此回调函数,并传入memory存储的数据。

 

2
0
分享到:
评论

相关推荐

    Jquery $when done then的用法详解

    对于$.ajax请求来说,如果层级比较多,程序看起来会比较乱,而为了解决这种问题,才有了$when…done…fail…then的封装,它将$.ajax这嵌套结构转成了顺序平行的结果,向下面的$.ajax写法,看起来很乱 $.ajax({ url...

    jquery1.11.0手册

    jQuery 1.11.0 速查表 核心 jQuery 核心函数 jQuery([sel,[context]]) jQuery(html,[ownerDoc])1.8* jQuery(callback) jQuery.holdReady(hold) jQuery 对象访问 each(callback) size() length selector ...

    jquery.waterfall:连续运行参数中给出的函数,每个函数将其结果传递给下一个函数

    3 个请求: $.waterfall(function() { $.ajax({url : first_url}) },function() { $.ajax({url : second_url}) },function() { $.ajax({url : another_url}) }).fail(function(error) {console.log(error)).done...

    printHtml.zip

    <script type="text/javascript" src="./jquery/1.9.1/jquery.min.js"> <!-- <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script> --> <!-- jq不同版本都可以 --> function local_print(){ ...

    javascript异步处理与Jquery deferred对象用法总结

    本文实例讲述了javascript异步处理与Jquery deferred对象用法。分享给大家供大家参考,具体如下: 这是项目组老大整理的一些... Ajax调用完成后执行的逻辑可以写成函数作为参数传递给Deffered对象的done(), fail(), a

    原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)

    由于项目中需要在提交ajax前设置header信息,jquery的ajax实现不了,我们自己封装几个常用的ajax方法。 jQuery的ajax普通封装 var ajaxFn = function(uri, data, cb) { $.ajax({ url: uri, type: 'POST', ...

    jQuery中deferred对象使用方法详解

    在jquery1.5之后的版本中,加入了一个deferred对象,也就是延迟对象,用来处理未来某一时间点发生的回调函数。同时,还改写了ajax方法,现在的ajax方法返回的是一个deferred对象。 那就来看看deferred对象的用法。 1...

    认识jQuery的Promise的具体使用方法

    和ES6的Promise对象长的有点像,jQuery的Deferred对象也有resolve、reject、then方法,还有done、fail、always……方法。jQuery就是用这个Deferred对象来注册异步操作的回调函数,修改并传递异步操作的状态。 玩玩...

    jQuery中的Deferred和promise 的区别

    Deferred和Promise之间有什么区别呢?...promise.done(mySuccessFunction); promise.fail(myErrorFunction); var promise = $.ajax({ url: "/myServerScript" }); promise.then(mySuccessFunction,myErrorFunc

Global site tag (gtag.js) - Google Analytics