; } }); Jquery版本在1.5之前,返回的是XHR对象;当版本高于1.5之后,返回的是deferred对象,可以使用 done 和 fail。...; }); 可以有多个done,按照顺序执行。 $.ajax("test.html") .done(function(){ alert("哈哈,成功了!")...; } ); $.when为多个事件指定相同的回调: $.when($.ajax("test1.html"), $.ajax("test2.html")) ...; },5000); }; 在未改装前使用无效:(原因在于$.when()的参数只能是deferred对象) $.when(wait()) .done(function(){ alert("哈哈...; df.resolve(); // 将df对象的执行状态从"未完成"改为"已完成",从而触发done()方法。
$.ajax()操作完成后,如果使用的是低于1.5.0版本的jQuery,返回的是XHR对象,你没法进行链式操作;如果高于1.5.0版本,返回的是deferred对象,可以进行链式操作。...请看下面的代码,它用到了一个新的方法$.when(): $.when($.ajax("test1.html"), $.ajax("test2.html")) .done(function(){...五、普通操作的回调函数接口(上) deferred对象的最大优点,就是它把这一套回调函数接口,从ajax操作扩展到了所有操作。...jQuery规定,deferred对象有三种执行状态----未完成,已完成和已失败。...如果执行状态是"已完成"(resolved),deferred对象立刻调用done()方法指定的回调函数;如果执行状态是"已失败",调用fail()方法指定的回调函数;如果执行状态是"未完成",则继续等待
Jquery中的promise的实现——deferred对象 deferred对象是jQuery的回调函数解决方案,它解决了如何处理耗时操作的问题,对那些操作提供了更好的控制,以及统一的编程接口。...现在新的ajax操作的写法是这样的: $.ajax("test.html") .done(function(){console.log(“成功”); }) .fail(function(...如果执行状态是"已完成"(resolved),deferred对象立刻调用done()方法指定的回调函数;如果执行状态是"已失败",调用fail()方法指定的回调函数;如果执行状态是"未完成",则继续等待...它允许你为多个事件指定一个回调函数 $.when($.ajax("test1.html"), $.ajax("test2.html")) .done(function(){ alert("成功...; }); 这样wait函数的返回值就是Deferred对象,when()函数能生效,wait()函数运行完,就会自动运行done()方法指定的回调函数。
; } }); $.ajax()操作完成后,如果使用的是低于1.5.0版本的jQuery,返回的是XHR对象,你没法进行链式操作;如果高于1.5.0版本,返回的是deferred对象,可以进行链式操作...六、本地操作使用回到函数 deferred对象,把这一套回调函数接口,从ajax操作扩展到了所有操作。...由于jQuery.when(deferreds)方法只能接收defferred对象作为参数,所以我们需对上述wait改写!...说明其作用需要先说一下jQuery规定deferred对象的三种执行状态:未完成、已完成和已失败。...如果执行状态是”已完成”(resolved),deferred对象立刻调用done()方法指定的回调函数; 如果执行状态是”已失败”,调用fail()方法指定的回调函数; 如果执行状态是”未完成”,则继续等待
$.ajax()操作完成后,如果使用的是低于1.5.0版本的jQuery,返回的是XHR对象,你没法进行链式操作;如果高于1.5.0版本,返回的是deferred对象,可以进行链式操作。...请看下面的代码,它用到了一个新的方法$.when(): $.when($.ajax(“test1.html”), $.ajax(“test2.html”)) .done(function(){ alert...五、普通操作的回调函数接口(上) deferred对象的最大优点,就是它把这一套回调函数接口,从ajax操作扩展到了所有操作。...jQuery规定,deferred对象有三种执行状态—-未完成,已完成和已失败。...如果执行状态是”已完成”(resolved),deferred对象立刻调用done()方法指定的回调函数;如果执行状态是”已失败”,调用fail()方法指定的回调函数;如果执行状态是”未完成”,则继续等待
四、为多个操作指定回调函数 $.when($.ajax("baidu.com"), $.ajax("google.com")) .done(function() { console.log...如果执行状态是”已完成”,deferred对象立刻调用done()方法指定的回调函数;【手动触发:dtd.resolve()】 如果执行状态是”已失败”,调用fail()方法指定的回调函数;【手动触发:...dtd.reject()】 如果执行状态是”未完成”,则继续等待,或者调用progress()方法指定的回调函数。...deferred.resolve() 手动改变deferred对象的运行状态为”已完成”,从而立即触发done()方法。....when(.when(.ajax( “/main.php” )) .then(successFunc, failureFunc ); 如果then()有两个参数,那么第一个参数是done(
但现实情况可能比这个复杂许多,A要完成一件事,可能要依赖不止B一个人的响应,可能需要同时向多个人询问,当收到所有的应答之后再执行下一步的方案。...第三方库的Promise 现今流行的各大js库,几乎都不同程度的实现了Promise,如dojo,jQuery、Zepto、when.js、Q等,只是暴露出来的大都是Deferred对象,以jQuery...}); // ajax $.ajax(options).then(success, fail); $.ajax(options).done(success).fail(fail); ...// ajax queue $.when($.ajax(options1), $.ajax(options2)) .then(function() { console.log...处理promises队列,jQuery实现的是$.when()方法,用法和Promise.all()类似。
$.ajax()操作完成后,如果使用的是低于1.5.0版本的jQuery,返回的是XHR对象,你没法进行链式操作;如果高于1.5.0版本,返回的是deferred对象,可以进行链式操作。...请看下面的代码,它用到了一个新的方法$.when(): $.when($.ajax("test1.html"), $.ajax("test2.html")) .done(function(){ alert...五、普通操作的回调函数接口(上) deferred对象的最大优点,就是它把这一套回调函数接口,从ajax操作扩展到了所有操作。...原因是jQuery规定,任意一个deferred对象有三种执行状态----未完成,已完成和已失败。...如果直接返回dtd,$.when()的默认执行状态为"已完成",立即触发后面的done()方法,这就失去回调函数的作用了。
) then执行回调 doneFun failFun progressFun jquery的同义词 $.ajax().success() $.ajax().error() 猛地一看,可能不太懂,...// 进行中1 def.notify(50) // 进行中50 def.resolve("done") // 完成done def.notify(100) // 无任何效果。...ajax中的同义词为:$.ajax().complete( ) 6、$.when的用法 和Es6不同的是,接受的不是一个数据。then响应的值数据时,也不是数据。...('全部执行完成'); console.log(data1, data2, data3); }); jquery中没有像ES6中的race方法。...ajax返回一个Deferred对象,success、error、complete是ajax提供的语法糖,功能与Deferred对象的done、fail、always一致。就酱。
那怎么给ajax添加多个回调事件呢? jQuery 中 Ajax 的发展 1....原始版本 在JQuery 1.5之前,Ajax仅支持一个回调函数, 1 $.ajax({ 2 url: "/ServerResource.txt", 3 success:...successFunction, 4 error: errorFunction 5 }); $.ajax()操作完成后,返回的是XHR对象,你没法进行链式操作; 2....也可以添加多个相同的回调函数: 1 $.ajax("test.html") 2 .done(function(){ alert("第一个done回调函数");} ) 3 .fail(function()...请看下面的代码,它用到了一个新的方法 $.when() : $.when($.ajax("test1.html"), $.ajax("test2.html")) .done(function(){ alert
AJAX 1. 请求与回调 jQuery的AJAX,核心的请求处理函数只有一个,就是 $.ajax(),然后就是一个简单的上层函数。...$.ajax() 的基本使用形式是: jQuey.ajax(settings) settings是一个对象,里面包含了所有的配置项。 url 请求的地址。...Deferred Deferred对象是在jQuery1.5中引入的回调管理对象。其作用是把一堆函数按顺序放入一个调用链,然后根据状态来依次调用这些函数。AJAX的所有操作都是使用它来进行封装的。...jQuery还提供了一个 jQuery.when()的回调管理函数,可以用于方便地管理多个事件并发的情况。...当我们需要完成,像“请求A和请求B都完成时,执行函数”之类的需求时,使用 $.when()就可以了。
filter 和 find 的区别 结论 submit a form in ajax success callback-AJAX 成功时回调函数中提交 Form API JQuery-Error...extra arg when ajax finished/succeed .each()的使用 获取数据 substr 获得子字符串 得到选中的 option 的内容 控件相关 select...的同时取消选择其他所有 jQuery: Uncheck other checkbox on one checked 判断是否被选中 Toggle for editable of inputs 获取...Iframe 里面的元素 和 Jquery 操作 CSS&style 表单 JQuery 动态添加表单 获取 Jquery 对象数组中的所有文字 Jquery 对象的属性转为数组 Query...handler 'loop'. ---- AJAX 相关 AJAX 传递额外参数-pass extra arg when ajax finished/succeed (function(v){
complete 当请求完成之后调用这个函数,无论成功或失败。传入 XMLHttpRequest 对象,以及一个包含成功或错误代码的字符串。...$.ajax()的返回值为 jqXHR对象,因此可以利用 jqXHR对象的方法() jqXHR.done(function( data, textStatus, jqXHR ) {}); 成功回调选项的可选构造器...() and .fail() methods, allowing (as of jQuery 1.8) the underlying Promise to be manipulated....这四个回调函数是官网推荐的,可以取代上面四个回调函数,详细看http://api.jquery.com/jQuery.ajax/ jqXHR对象的属性 readyState responseXML...and/or responseText when the underlying request responded with xml and/or text, respectively status
(successFn).fail(failFn).always(alwaysFn); jQuery 的 $.ajax 返回的就是一个 Promise 对象。...如 $.ajax({ //... }).done(successFn).fail(failFn); 下面我会结合具体情况来介绍 Deferred 的使用。...其中第 n 个操作要在第 n - 1 个操作完成后才能执行。...第 n 个操作要在前 n - 1 个操作完成后才能执行。...用 Deferred 这么写 $.when(doThing1, doThing2) .done(doThing3) .done(doThing4); jQuery Defferred 的一些具体
$.getJSON().done(function(){ alert('成功'); }) jQuery的$.ajax()本身就支持Deferred,它可以链式补上 .done() .fail() 等方法来处理不同状态的结果...用$.Deferred()就很简单,getImgWidth()的定义不变,使用$.when()方法来处理同时完成的事件。...$.when(getImgWidth(), getImgWidth()).done(function(width1,width2){ alert('第一张图片宽度:'+ width1); alert...deferred.resolve() 手动改变deferred对象的运行状态为”已完成”,从而立即触发done()方法。...$.when() 为多个操作指定回调函数。 deferred.then() 有时为了省事,可以把done()和fail()合在一起写,这就是then()方法。
一、前言 jQuery.Deferred作为1.5的新特性出现在jQuery上,而jQuery.ajax函数也做了相应的调整。...辅助方法——jQuery.when 功能就是等待所有入参均返回值后,以这些返回值为入参调用回调队列的函数 $.when = function(object) { var args = arguments...jQuery1.5除了新增jQuery.Deferred特性,还以jQuery.Deferred为基础对ajax模块进行增强,相关代码如下: function done( status, statusText...1.7版本的jQuery.Deferred是否更接近Promises/A+规范呢?答案是否定的。 ...中then函数的实现方式与旧版本的不同,埋下了兼容陷阱,但由于jQuery.Deferred受众面少(直接使用Ajax、effects和queue模块的Promise形式的API较多),因此影响范围不大
异步回调 因为js是单线程的,但是有很多情况的执行步骤(ajax请求远程数据,IO等)是非常耗时的,如果一直单线程的堵塞下去会导致程序的等待时间过长页面失去响应,影响用户体验了。...任务的执行不取决于代码的顺序,而取决于某个事件是否发生。 还是以f1和f2为例。首先,为f1绑定一个事件(这里采用的jQuery的写法)。...f1.trigger('done')表示,执行完成后,立即触发done事件,从而开始执行f2。...("done"); }, 1000); } jQuery.publish("done")的意思是,f1执行完成后,向"信号中心"jQuery发布"done"信号,从而引发f2的执行。...此外,f2完成执行后,也可以取消订阅(unsubscribe)。 jQuery.unsubscribe("done", f2); 这种方法的性质与"事件监听"类似,但是明显优于后者。
在浏览器端,耗时很长的操作都应该异步执行,避免浏览器失去响应,最好的例子就是Ajax操作。...任务的执行不取决于代码的顺序,而取决于某个事件是否发生。 还是以f1和f2为例。首先,为f1绑定一个事件(这里采用的jQuery的写法)。 ...}, 1000); } f1.trigger('done')表示,执行完成后,立即触发done事件,从而开始执行f2。.../ f1的任务代码 jQuery.publish("done"); }, 1000); } jQuery.publish("done")的意思是,f1执行完成后,向"信号中心"jQuery...此外,f2完成执行后,也可以取消订阅(unsubscribe)。 jQuery.unsubscribe("done", f2); 这种方法的性质与"事件监听"类似,但是明显优于后者。
在浏览器端,耗时很长的操作都应该异步执行,避免浏览器失去响应,最好的例子就是Ajax操作。...假定有两个函数f1和f2,后者等待前者的执行结果。...}, 1000) 三、发布/订阅 使用jQuery插件https://github.com/cowboy/jquery-tiny-pubsub jQuery.subscribe("done", f2);...("done"); }, 1000); } f1(); jQuery.unsubscribe("done", f2); // 取消订阅 这种方法的性质与”事件监听”类似,但是明显优于后者...return dfd.promise(); } f1().then(f2); 好处:如果一个任务已经完成,再添加回调函数,该回调函数会立即执行。所以,你不用担心是否错过了某个事件或信号。
领取专属 10元无门槛券
手把手带您无忧上云