У меня есть довольно сложная функция, которая выполняет пару сообщений AJAX при отправке формы для проверки значений.В зависимости от значений, возвращаемых из POST, отправка должна либо работать, либо завершаться с ошибкой.Я думал, что это можно сделать, используя глобальное логическое значение и устанавливая его значение равным true или false во всей функции, затем проверяя в конце, было ли логическое значение изменено на «true», и, если это так, вызывает «return false;».
Это терпит неудачу, хотя.Я прочитал об этом, и я думаю, что это потому, что вызов AJAX является асинхронным, поэтому код не выполняется последовательно.
Мой код выглядит так:
$('.to-step-3').click(function(){
var shape = '';
blnError = false;
$.post('/base/RoomBuilder/GetRoomShape.aspx', function(data) {
if(data.substring(0,5) == 'Error'){
alert(data);
blnError = true;
}else{
shape = data;
$.post('/base/RoomBuilder/GetRoomDimensions.aspx', function(data2) {
if(data2.substring(0,5) == 'Error'){
alert(data2);
blnError = true;
}else{
var arrDims = data2.split('_');
var l = arrDims[0];
var w = arrDims[1];
var sl = arrDims[2];
var ll = arrDims[3];
var sw = arrDims[4];
var lw = arrDims[5];
var failMessage = 'Please enter all required dimensions to build your room';
switch(shape) {
case 'square':
if(!(notNullOrEmpty(l))){
alert(failMessage);
blnError = true;
}
break;
case'rectangle':
if(!(notNullOrEmpty(l)) || !(notNullOrEmpty(w))){
alert(failMessage);
blnError = true;
}
break;
case'lshaped':
if(!(notNullOrEmpty(sl)) || !(notNullOrEmpty(ll)) || !(notNullOrEmpty(sw)) || !(notNullOrEmpty(lw))){
alert(failMessage);
blnError = true;
}
break;
case'lshapedalt':
if(!(notNullOrEmpty(sl)) || !(notNullOrEmpty(ll)) || !(notNullOrEmpty(sw)) || !(notNullOrEmpty(lw))){
alert(failMessage);
blnError = true;
}
break;
}
}
});
}
});
if(blnError == true){
return false;
}else{
return true;
}
});
Я нашелпример чего-то похожего jquery - вернуть значение из функции обратного вызова (в пост-запросе) в функцию, находящуюся внутри? , но я пытаюсь разобраться в этом в контексте того, что мне нужно сделать (яПо общему признанию, я не очень хорош в Javascript!)
Может ли кто-нибудь указать мне правильное направление здесь, поскольку я слишком долго смотрел на это!Спасибо всем.