为什么不执行$ .ajax()的.always方法回调函数?

时间:2019-08-28 19:23:37

标签: jquery ajax ladda

我正在使用Ladda来显示等待AJAX​​调用时的动画。我使用Ladda start()方法启动按钮上的动画,完成工作后需要停止动画,但是未执行$ .ajax()的always方法的回调,为什么?

let l = Ladda.create(this);
l.start();
$.ajax({
  url: molarisk_public.ajaxurl,
  type: 'post',
  data: {
    action: 'user_send_verification',
    _nonce: molarisk_public.nonce,
    log: log,
    pwd: pwd,
    ver_type: ver_type
  },
  success: function(result) {
    switch (result) {
      case 'signin_attempt_sent':
        output_p.removeClass('text-danger');
        output_p.addClass('text-success');
        output_p.text('Codice generato, controlla la posta!');
        break;
      case 'email_verification_sent':
        output_p.removeClass('text-danger');
        output_p.addClass('text-success');
        output_p.text('Link di verifica inviato, controlla la posta!');
        break;
      case 'email_unverified':
        output_p.removeClass('text-success');
        output_p.addClass('text-danger');
        let unverified = 'Non hai ancora verificato il tuo indirizzo e-mail. Esegui prima la verifica dell’indirizzo cliccando sul link che ti è stato inviato oppure <button type="button" class="as-a-link send-link-btn" id="test">richiedi un nuovo link di verifica</button>.';
        output_p.html(unverified);
        break;
      default:
        output_p.removeClass('text-success');
        output_p.addClass('text-danger');
        output_p.text(result);
    }
    //l.stop();
  },
  always: function() {
    l.stop();
  }
});

1 个答案:

答案 0 :(得分:1)

这是因为您正在使用$.ajax中的设置对象的属性。因此,属性名称应为complete

$.ajax({
  // other properties...
  success: function(result) {
    // your logic
  },
  complete: function() {
    l.stop();
  }
});

您似乎将它与延迟对象上的always()方法混淆了。要使用该方法,请在$.ajax()之后将方法调用链接:

$.ajax({
  // request properties...
}).done(function(result) {
  switch(result) {
    // your logic
  }
}).always(function() {
  l.stop();
});