Несколько вызовов jQuery Ajax с использованием обещаний - PullRequest
0 голосов
/ 31 октября 2018

Я постепенно осваиваю использование обещаний, но теперь мне нужно обрабатывать несколько обещаний. Это фрагмент моего кода, который содержит два ввода электронной почты в форме, которые генерируют обещания, и оба должны быть обработаны, прежде чем форма может быть отправлена. Как я могу справиться с этой ситуацией?

// checks form submission
$('#ml_doaction').on('click', function(e) {
  e.preventDefault();
  var isOK = true;
  $('form#volreg :input').each(function(){
    var id = this.id;
    switch(id)
    {
      case 'email_one':
      case 'email_two':
        checkEmailStatus(id, true).then(function(data) {
          if(isOK && data !== false) {
            // submit form
            $('form#volreg').submit();
          }
        });
      break;

      // etc ....
      //other validation functions that set isOK appropriately
    }
  });
});

$('#email').blur(function(){checkEmailStatus('email_one')});
$('#contact_email').blur(function(){checkEmailStatus('email_two')});
function checkEmailStatus(id)
{
  var emailVal = $('#' + id).val();
  var dfd = $.Deferred();

  $.ajax({
    type: 'POST',               
    data:{'checkEmailStatus':emailVal, 'checkList': 'General'},
    url:'/php/ajax/validation-ajax.php',
    success:function(response){
      if(response == 'notinlist') {
        dfd.resolve(false);
      }
      else if(response == 'yesinlist') {  
        dfd.resolve(true);
      }
    },
  });
  return dfd.promise();
}

1 Ответ

0 голосов
/ 31 октября 2018

Вы используете функцию Promise.all

 var promises = [];
 $('form#volreg :input').each(function(){
    var id = this.id;
    switch(id)
    {
      case 'email_one':
      case 'email_two':
        promises.push(checkEmailStatus(id, true));
      break;

      // etc ....
      //other validation functions that set isOK appropriately
    }
  });

    Promise.all(promises).then(function(values) {
      var isData = true;
       $.each(values,function(v) {
           if(v == false) {isData = false;
           break;}
        })
       if(isOK && isData !== false) {
            // submit form
            $('form#volreg').submit();
          }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...