Показать сообщение отдельно
  #1 (permalink)  
Старый 05.05.2011, 17:59
Аспирант
Отправить личное сообщение для tarya Посмотреть профиль Найти все сообщения от tarya
 
Регистрация: 29.03.2011
Сообщений: 49

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


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