2016-01-28 3 views
2

У меня есть форму и представить. Если что-то заполнено, перед подачей я хочу убедиться, что это хорошая ценность (с ajax), и если да, ТОГДА я могу только позволить продолжить. Так,Как приостановить событие отправки до завершения события AJAX?

$('#contact').submit(function() { 
    // ajax 
    $.ajax({ 
    type: 'POST', 
    url: $(this).attr('ajaxgetaccommodationsbyemail'), 
    success: function(answer) { 
     here a popup window opens, which waits until I press YES or NO 
    }, 
    async: false 
    }); 

    this is when return TRUE or FALSE 
    there should be something like 
    do while (popupWindowClosed) 
    so $.when is not an option 

}); 
+1

Установить глобальную переменную, когда AJAX успешно возвращается. Отмените событие 'submit', если глобальная переменная не установлена. – Blazemonger

ответ

6

Вы можете предотвратить Подавать с JQuery, а затем на самом деле назвать родным представить отправить форму

$('#contact').on('submit', function(e) { 

    e.preventDefault(); 

    var form = this; 

    $.ajax({ 
     type: 'POST', 
     url: $(this).attr('ajaxgetaccommodationsbyemail'), 
     success: function(answer) { 
      popup(function(yesorno) { 

       if (yesorno) { 
        form.submit(); 
       } 

      }); 
     } 
    }); 
}); 

И async:false удалены, потому что вы не должны никогда сделать Синхронный Аякса ,

+0

, но «if (подтвердить (« Вы уверены »)) {« не так. Его другая «асинхронная» вещь –

+2

Не имеет значения, тот же принцип применяется, вы добавляете всплывающее окно внутри функции «success», и если это настраиваемое всплывающее окно, оно имеет обратный вызов, где вы можете вызвать 'submit()', Я отредактирую ответ обратно, как это было изначально – adeneo

+0

, но. При отправке поведение по умолчанию отключено. Когда я вызываю form.submit(), он снова отключит поведение по умолчанию .... –

1
$('#contact').submit(function(e) { 
    e.preventDefault(); 
    var form = $(this); 
    // ajax 
    $.ajax({ 
    type: 'POST', 
    url: $(this).attr('ajaxgetaccommodationsbyemail'), 
    success: function(answer) { 
     $.dialog(function(){ // this line is "pseudocode", put the code of your dialog here. 
      // when clicked YES 
      form.submit(); 
     }, function(){ 
      // when clicked NO 
     }); 
    } 
    }); 
}); 

Если вы действительно хотите настраиваемый диалог, вы можете использовать: https://jqueryui.com/dialog/#modal-confirmation

1

JQuery Ajax имеет ошибки и успеха обратных вызовов. Вы можете сделать следующее:

$('#contact').submit(function() { 
    // ajax 
    $.ajax({ 
    type: 'POST', 
    url: $(this).attr('ajaxgetaccommodationsbyemail'), 
    error: function (request, error) { 
     // there was error. handle it how you want 
    }, 
    success: function() { 
     // open your pop up window 
     // and do other stuff 
    } 
    }); 

}); 
Смежные вопросы