Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Проверка форм: .ajax async (https://javascript.ru/forum/jquery/17096-proverka-form-ajax-async.html)

tarya 05.05.2011 17:59

Проверка форм: .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');
    }


Спасибо за ваше время и советы.

walik 05.05.2011 18:24

Так должно работать.
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

tarya 05.05.2011 20:38

Спасибо! Да, это работает как и положено! Спасибо!


Часовой пояс GMT +3, время: 18:23.