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存储的数据。
相关推荐
对于$.ajax请求来说,如果层级比较多,程序看起来会比较乱,而为了解决这种问题,才有了$when…done…fail…then的封装,它将$.ajax这嵌套结构转成了顺序平行的结果,向下面的$.ajax写法,看起来很乱 $.ajax({ url...
jQuery 1.11.0 速查表 核心 jQuery 核心函数 jQuery([sel,[context]]) jQuery(html,[ownerDoc])1.8* jQuery(callback) jQuery.holdReady(hold) jQuery 对象访问 each(callback) size() length selector ...
3 个请求: $.waterfall(function() { $.ajax({url : first_url}) },function() { $.ajax({url : second_url}) },function() { $.ajax({url : another_url}) }).fail(function(error) {console.log(error)).done...
<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对象用法。分享给大家供大家参考,具体如下: 这是项目组老大整理的一些... Ajax调用完成后执行的逻辑可以写成函数作为参数传递给Deffered对象的done(), fail(), a
由于项目中需要在提交ajax前设置header信息,jquery的ajax实现不了,我们自己封装几个常用的ajax方法。 jQuery的ajax普通封装 var ajaxFn = function(uri, data, cb) { $.ajax({ url: uri, type: 'POST', ...
在jquery1.5之后的版本中,加入了一个deferred对象,也就是延迟对象,用来处理未来某一时间点发生的回调函数。同时,还改写了ajax方法,现在的ajax方法返回的是一个deferred对象。 那就来看看deferred对象的用法。 1...
和ES6的Promise对象长的有点像,jQuery的Deferred对象也有resolve、reject、then方法,还有done、fail、always……方法。jQuery就是用这个Deferred对象来注册异步操作的回调函数,修改并传递异步操作的状态。 玩玩...
Deferred和Promise之间有什么区别呢?...promise.done(mySuccessFunction); promise.fail(myErrorFunction); var promise = $.ajax({ url: "/myServerScript" }); promise.then(mySuccessFunction,myErrorFunc