Как запретить отправку формы, когда я использую ajax для ее проверки. Проблема в том, что ajax является асинхронным, а реальный результат (в моем случае false
) приходит позже. Правильно ли делать Ajax
до sync
? Это мой кусок кода:
$('#w0').on('beforeSubmit', function(e){
let loadDate = $('#dstrequest-load_date').val()
let shippingDate = $('#dstrequest-shipping_date').val()
let requestId = '".($model->isNewRecord ? 0 : $model->id)."'
let trucks = $('.container-items_truck').find('.truck-item')
let ids = []
let result = true
$.each(trucks, function(){
let id = $(this).find('select').first().val()
if(ids.indexOf(id) === -1)
ids.push(id)
})
$.ajax({
method: 'post',
url: '/erp/distribution/dst-vehicle/check-truck-engage-date',
data: {
load_date: loadDate,
shipping_date: shippingDate,
trucks: ids,
request_id: requestId
}
})
.done(function(data){
let selects = $('select[name$=\"[truck_id]\"]')
$.each(selects, function(){
let val = $(this).val()
if(data.indexOf(val) !== -1){
$('#w0').yiiActiveForm('updateAttribute', $(this).attr('id'), ['".Yii::t('distribution', 'distributionCore.busy_truck')."'])
result = false
}
})
})
.always(function(data){
let transfer_wrapper = $('.transfer-wrapper')
$.each(transfer_wrapper, function(){
if($(this).is(':visible')){
let fields = $(this).find('input, select')
$.each(fields, function(){
if($(this).val() == ''){
let id = $(this).attr('id')
$('#w0').yiiActiveForm('updateAttribute', id, ['" . Yii::t('distribution', 'distributionCore.please_fill_the_field') . "'])
result = false
}
})
}
})
})
// HERE THE RESULT SHOULD BE FALSE BECAUSE OF THE AJAX VALIDATION BUT IT'S TRUE BECAUSE OF THE ASYNC BEHAVIOUR.
return result
})