Проверка форм: .ajax async
Добрый день. Как-то спрашивал тут вопрос, в принципе ответили, а сейчас решил сесть разобраться и что-то не выходит.
Если в двух словах вопрос такой. Я регулярно отправляю разные формы, перед этим делаю проверку на заполнение полей. Скрипт делает серелизацию данных всех полей отправляет на сервер, там данные проверяются и назад идет ответ с ошибкой или если все хорошо форма обсубмичивается и отправляются данные опять на сервер, но уже на повторную обработку и сохранение. Так как порядок действий везде одинаков хорошо бы написать одну фуцею которая бы это делала. И это есть. Но иногда нужно чтото особенное, например данные после проверки не обсубмичиваются а чтото с ними происходит. Так. Хотелось бы иметь скрип который проверял данные и возвращаю ТРУ если все хорошо, или ФОЛЗ если все плохо. Так как это выглядит примерно:
if(verify()){
ok
} else {
bad
}
То у меня всегда в месте условия было "undefined", написал про это здесь где мне и посоветовали обратиться к параметру "async". Установил в фолз и если честно не то что нужно. Пример. Если сделать код таким:
var ajaxtest = new Object({
run: function(){
$.ajax({
url: "ajaxtest.php",
global: false,
type: "POST",
data: ({sendvar: 1}),
dataType: "json",
async: false,
success: function(answer){
if(answer.error == 200){
alert('1');
}
},
error: function (answer, status, e){
alert("Error " + e);
}
});
}
});
//Run
$(document).ready(function() {
ajaxtest.run();
alert('2');
});
Выводится как и положено 1, 2. Если ставить async: true, то порядок 2,1 что неправильно. Как бы все хорошо, но мне не нужно алерты выводить, мне нужно вернуть или тру или фолз. Переписываю пример:
var ajaxtest = new Object({
run: function(){
$.ajax({
url: "ajaxtest.php",
global: false,
type: "POST",
data: ({sendvar: 1}),
dataType: "json",
async: false,
success: function(answer){
if(answer.error == 200){
return 200;
}
},
error: function (answer, status, e){
alert("Error " + e);
}
});
}
});
//Run
$(document).ready(function() {
var a = ajaxtest.run();
alert(a);
alert('2');
});
Тут уже все плохо. Получаем "undefined", "2". Хотя ожидается "200", "2". И третий пример подобный второму:
var ajaxtest = new Object({
run: function(){
$.ajax({
url: "ajaxtest.php",
global: false,
type: "POST",
data: ({sendvar: 1}),
dataType: "json",
async: false,
success: function(answer){
if(answer.error == 200){
return true;
}
},
error: function (answer, status, e){
alert("Error " + e);
}
});
}
});
//Run
$(document).ready(function() {
if(ajaxtest.run()){
alert('400');
}
alert('2');
});
Выводится только "2", хотя предполагается 400, 2. Подскажите как правильно все составить чтоб можно было пользоваться конструкцией как эта:
if(ajaxtest.run()){
alert('400');
}
Спасибо за ваше время и советы. |
Так должно работать.
var ajaxtest = new Object({
run: function(){
var ret;
$.ajax({
url: "http://javascript.ru/",
global: false,
type: "POST",
data: ({sendvar: 1}),
async: false,
success: function(answer){
ret = true;
},
error: function (answer, status, e){
ret = false;
}
});
return ret;
}
});
if (ajaxtest.run())
alert('ok');
else
alert('false');
Когда вы писали условие: if(ajaxtest.run()) Вы проверяли выполняется ли функция ajaxtest.run() а не сам AJAX запрос. В моем примере мы в переменную сохраняем результат выполнения запроса, и возвращаем его функцией run |
Спасибо! Да, это работает как и положено! Спасибо!
|
| Часовой пояс GMT +3, время: 22:58. |