相关文章推荐
博学的钢笔  ·  JS得到div ...·  1 月前    · 
跑龙套的牛肉面  ·  RapidJSON 许可证 - ...·  5 月前    · 
月球上的匕首  ·  stream().filter()的cont ...·  6 月前    · 
打酱油的书签  ·  problems with ...·  1 年前    · 
潇洒的小虾米  ·  org.hibernate.exceptio ...·  1 年前    · 

jquery的deferred对象的done方法和then方法都能实现链式调用,但是他们的作用是有区别的,then方法中如果你传递的方法有返回值,那么他会传递给下一个链式调用的方法。而done方法与此相反,你传递的方法就算有返回值,done方法也不会把你的返回值传给下一个链式调用的方法的,

话不多说,直接上实例:

var defer = jQuery.Deferred();

defer.done(function(a,b){

console.log("a = " + a+"b = " + b);

return a * b;

}).done(function( result ) {

console.log("result = " + result);

}).then(function( a, b ) {

console.log("a = " + a+"b = " + b);

return a * b;

}).done(function( result ) {

console.log("result = " + result);

}).then(function( a, b ) {

console.log("a = " + a+"b = " + b);

return a * b;

}).done(function( result ) {

console.log("result = " + result);

defer.resolve( 2, 3 );

输出结果如下:

结果分析:

1、第一个done和第二个done都返回了defer.resolve( 2, 3 )

2、done中callback的返回值不会被传递

3、第二个done只有一个参数,接收了defer.resolve( 2, 3 )的第一个参数2,所以result是2

4、第一个then接收defer.resolve( 2, 3 ),接收两个参数,result是6,同时新建一个deferred object,传递result给deferred object

5、第三个done接收到了这个新的deferred object和传递的result,打印结果是6,并把这个新的deferred object传递给第二个then

6、第二个then现在接收新的deferred object,它只有一个参数,是result,所以参数b没有定义,返回的结果是NaN,同时又新建一个deferred object

7、第四个done接收一个新建的deferred object,传递的参数是NaN,打印的结果自然就是NaN

以上这篇jquery中done和then的区别(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

jquery的deferred对象的done方法和then方法都能实现链式调用,但是他们的作用是有区别的,then方法中如果你传递的方法有返回值,那么他会传递给下一个链式调用的方法。而done方法与此相反,你传递的方法就算有返回值,done方法也不会把你的返回值传给下一个链式调用的方法的,话不多说,直接上实例:var defer = jQuery.Deferred();defer.done(fun... $(selector).load(URL,data,callback); load()函数用于从服务器加载数据,并使用返回的html内容替换当前匹配元素的内容。 load()函数默认使用GET方式,如果提供了对象形式的数据,则自动转为POST方式。 因为默认使用的是Get请求方式,所以我们也可以在url加数据进行提交。 例如$("#box").load("loadTest.html?name=zhang&age=25"
我们在有些地方可能需要对服务器返回的参数做多步处理,或者很多复杂的操作必须等到服务器返回结果之后才会执行,那么我们可以用链式调用的then方法让这里做到更加易于扩展,也更加容易分离出各个功能模块。基本的方法如下。 1 doSubmit: function(){ 3 return $. ajax ({ 4 url: url, 5 type: 'post...
1. axios是基于Promise的,而 jquery ajax 是基于回调函数的。 2. axios支持浏览器和Node.js环境,而 jquery ajax 只支持浏览器环境。 3. axios可以拦截请求和响应,而 jquery ajax 不支持。 4. axios可以自动转换请求和响应的数据格式,而 jquery ajax 需要手动设置。 5. axios可以取消请求,而 jquery ajax 不支持。 6. axios可以设置全局默认配置,而 jquery ajax 需要每次设置。 7. axios可以处理跨域请求,而 jquery ajax 需要手动设置。