У меня есть функция JS - checkUsername - которая включает вызов Ajax.Он проверяет ввод формы, а также проверяет тот же ввод во время отправки формы:
function checkUsername(id) {
var userName = $('#' + id).val().trim();
if(!userName) {
showErr(id, 'An entry is required.');
return Promise.resolve(false);
}
return $.ajax({
type: 'POST',
data:{'checkUsername': userName},
url:'/php/ajax/validation-ajax.php',
})
.then(function(response) {
if(response == 'notfound') {
showErr(id, 'This user is not in the list.');
return(false);
}
else {
clearErr(id);
return(true);
}
})
.fail(function(err) {
// some code
})
}
В первом случае он вызывается обработчиком события.Во втором он является частью оператора switch:
case 'username':
checkUsername(id).then(function(data) {
if(isOK && data !== false) {
// submit form
$('form#adminusers').submit();
}
});
break;
В случае отправки формы, я думаю, что обещание функции выполнено правильно.Но, вероятно, когда функция вызывается обработчиком события, обещание остается висеть.
Имеет ли это значение?Даже если я напишу две версии функции, одну для обработчика событий, а другую для отправки формы, версия обработчика событий все равно будет содержать вызов Ajax, поэтому ситуация с обещаниями не будет отличаться.
Как правильно справиться с этой ситуацией?