У меня есть мастер / форма, использующая JQuery Steps для добавления клиента на наш внутренний веб-сайт, и мне нужно проверить адрес электронной почты / телефона / сервера имен для проверки уже существующих клиентов. PHP возвращает количество совпадений. Если они не существуют, JQuery Steps имеет событие onStepChanging , которому требуется возвращаемое значение true, чтобы позволить ему перейти к следующему «шагу» (естественно, возвращает false).
Я использовал 'async:false'
в своем Ajax-запросе, который работает, но я получаю предупреждение об его устаревании, и в этом случае мне нужно, чтобы он выполнялся синхронно. Я хочу сделать это правильно и следовать рекомендациям, особенно если «async: false» не рекомендуется. По-видимому, он будет устаревшим, чтобы улучшить взаимодействие с пользователем, не замораживая процессы.
Если я удаляю «async: false», то когда я вызываю свой checkExisting (), я всегда получаю 0, потому что он не будет обновлять мою переменную «совпадения», так как она работает асинхронно, и я понимаю это, но мне нужно вернуть количество совпадений.
Я пытался изменить свой AJAX и вернуть AJAX1, затем сделал
.
checkExisting(..).done(function(){... return true})
но, похоже, это тоже не работает и возвращает [object Object]
. Он возвращает меня из .done (), но не передает этот возврат true / false в onStepChanging: function () {...}
Обычно я делал бы что-то вроде
validateThing().done(function() {
// if invalid, add a red border around the input
// add validation message
});
Я прочитал несколько ответов, и они, кажется, предлагают реструктурировать ваш код, чтобы улучшить взаимодействие с пользователем. Некоторые предлагали вернуть ajax и использовать .done () или .then (). Однако я связан с этим событием onStepChanging в jQuery Steps, и мне нужно вернуть true / false.
// this is what currently works with async:false
function checkExisting(email) {
let matches = 0;
let ajax1 = $.ajax({
url: "/includes/pages/organisations/ajax.php",
type: "GET",
async: false,
data: {action: 'checkExisting', value: email},
success: function(response) {
const responseData = JSON.parse(response);
matches = responseData.matches;
}
});
return matches;
}
// JQuery Steps
$('#addNewCustomer').steps({
onInit: function() {},
onStepChanging: function(e,currentIndex, newIndex) {
let stepStatus = false;
if(checkExisting(customer.email) === 0) {
// customer exists
stepStatus = true;
} else {
// add validation error message
// add validation styling
}
return stepStatus;
}
...
});
Мне нужно иметь возможность вызывать checkExisting () и заставить его вернуть число. Затем я могу использовать это, чтобы вернуть true / false в JQuery Steps, и я также могу использовать его, чтобы сообщить о количестве совпадающих клиентов в сообщении проверки («3 клиента существуют с этим числом»).
Извиняюсь, если я невероятно плотный, и мне не хватает чего-то очевидного!
Спасибо за ваше время.