$.when().done().then()的用法以及jQuery的deferred对象详解

讲解详细地址:$.when().done().then()的用法

开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异步的操作(比如ajax读取服务器数据),也有同步的操作(比如遍历一个大型数组),它们都不是立即能得到结果的。

通常的做法是,为它们指定回调函数(callback)。即事先规定,一旦它们运行结束,应该调用哪些函数。

但是,在回调函数方面,jQuery的功能非常弱。为了改变这一点,jQuery开发团队就设计了deferred对象

简单说,deferred对象就是jQuery的回调函数解决方案。在英语中,defer的意思是"延迟",所以deferred对象的含义就是"延迟"到未来某个点再执行

 范例:JeeSite Demo项目jssSite.js代码片段

deferAjax: function ( url, data, message ) {   //jssSite.js代码中定义了名称为js的对象,此为js对象的一方法
      var defer = $.Deferred();                        //$.when()的参数只能是deferred对象
      $.ajax( {
        url: url,
        type: 'POST',
        data: data,
        dataType: 'json',
        beforeSend: function () {                 
          js.loading( message == undefined ? js.text( "loading.submitMessage" ) : message );
          $( ".btn" ).attr( "disabled", true );
        },
        complete: function () {
          $( ".btn" ).attr( "disabled", false );
          js.closeLoading();
        },
        success: function ( ret ) {
          defer.resolve( ret );
        },
        error: function (ret ) {
          $( ".btn" ).attr( "disabled", false );
          js.showErrorMessage( ret.responseText );
          js.closeLoading( 0, true )
        }
      } );
      return defer;
    }

 //beforeSend  complete  success  error  的使用见:https://blog.csdn.net/xiangwang2016/article/details/87261879


$.when( js.deferAjax( url, data, "添加菜单中...." ) ).done( function ( ret ) {     //js对象调取deferAjax()方法
              console.log( JSON.stringify( ret ) );
              if ( ret.code == "0000" ) {
                js.showMessage( ret.result, "添加状态", "success", "1000" );
                js.closeCurrentTabPage( function ( contentWindow ) {
                  contentWindow.$( '#dataGrid' ).dataGrid( 'refreshTreeChildren' );
                } );
              } else {
                js.showErrorMessage( ret.message );
              }
  } );

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值