Проверка форм: .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, время: 05:08. |