Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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');
    }


Спасибо за ваше время и советы.
Ответить с цитированием
  #2 (permalink)  
Старый 05.05.2011, 18:24
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

Так должно работать.
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
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
  #3 (permalink)  
Старый 05.05.2011, 20:38
Аспирант
Отправить личное сообщение для tarya Посмотреть профиль Найти все сообщения от tarya
 
Регистрация: 29.03.2011
Сообщений: 49

Спасибо! Да, это работает как и положено! Спасибо!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка данных формы составным условием? myafa Элементы интерфейса 8 01.04.2011 08:30
Проверка полей отправляемой формы. denisOgr jQuery 6 18.10.2010 19:40
Снова проверка форм Falcon Элементы интерфейса 1 04.12.2009 01:59
проверка форм с помощиью php и js fizichello Общие вопросы Javascript 2 10.11.2009 03:31
проверка форм Wilder jQuery 2 12.08.2009 16:06