| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: для новичков > Валидация с AJAX. Продлема с отправкой формы |
| Автор: KonstRuctor 25.6.2011, 00:46 | ||||||
Всем привет! Проверяю простенькую форму:
По событию onblur() проверяю данные так:
У меня есть php-скрипт ajax.php, который выдает мне xml примерно такой:
Все работает, ошибки показываются. Но я не понимаю, как мне запретить делать саму отправку форму, пока есть ошибки. Другими словами, ошибки-то я на экран показал, но юзер запросто может нажать кнопку и отправить форму с ошибками. Разумеется, я ее проверю еще раз на сервере, это сделает php. Однако хочется сделать юзабильно. У меня есть функция onclick="return validateAll(myform)", которая прицеплена к кнопке. Получается, что придется этой функции еще раз проверять все поля? Как сделать правильно? Спасибо |
| Автор: Shogun 25.6.2011, 00:52 |
| Хммм... return false в функции если ошибка. А также советую: 1. POST вместо GET 2. jQuery, Prototype ... вместо простого Javascript 3. JSON вместо XML не пожалеете имхо... |
| Автор: KonstRuctor 25.6.2011, 12:36 |
| Я, признаться, ничего не понял. Если ошибка -- return false это мне понятно, причем кристально понятно. Я не понимаю, как это реализовать в моем конкретном примере. По мере заполнения формы у юзера выскакивают предупреждения, что он что-то делает не так. POST, GET, XML, JSON -- в данном случае это не так важно. Предупреждения у меня работают. НО мне не понятно как запретить отсылать форму на сервер. Я имею в виду конкретно -- как в смысле примера кода, а не в смысле "если false, то не отправляй". |
| Автор: нуп 25.6.2011, 14:50 | ||
Как то так
Так должно работать |
| Автор: KonstRuctor 26.6.2011, 23:35 | ||||||||
| Спасибо, друзья. Все выходные работал. Shogun натолкнул меня на интересные мысли. Сделал так: 1) В php-скрипте принимаю данные, если у юзера отключен javascript. Здесь все понятно. 2) В html-форме все проверки убрал вообще, назвал ее так:
3) В страницу подключил вот эти скрипты:
4) Написал скрипт valid.js:
5) Самое сложное было сделать скрипт ajax.php. Он большой, в нем у меня проверяются капча, юзернэйм, заполнение скрытого с помощью css поля email (роботы ведь его обязательно заполнят, и сработает "indexOK" Поэтому приведу тут только маленький его фрагмент, для ясности изложения мысли:
6) Основная идея = если нет ошибок, в скрипт valid.js приходит строка 'OK' и юзера перенаправляют в скрипт thankyou.php, где ему говорят "спасибо, друге" и оттуда уже на ту же страницу с формой. Это важно, чтобы сбросить параметры капчи, сессию и так далее. Внимание! несмотря на прямое указание везде где только можно "windows-1251" в базу записываются закарюки вместо букв. Только прямое указание $username = iconv('UTF-8', 'CP1251', $username); решает проблему. Вроде бы все работает. Хорошо понимаю, что Америки я не открыл и велосипеда не изобрел, вернее попытался Однако парился все выходные и решил поделиться своим решением. Если есть мысли по поводу моего алгоритма, буду искренне рад обсудить. Спасибо!!! |
| Автор: KonstRuctor 18.7.2011, 13:06 |
| При чем тут отделение php кода от HTML? Я задавал вопрос по сути алгоритма и надеялся услышать конструктивный комментарий. Например, используй такой подход или попробуй делать так-то и так-то. Свой рабочий код я не показывал и, в принципе, в его рефакторинге не нуждаюсь. |
| Автор: нуп 18.7.2011, 14:48 | ||
А в чем ужас такого подхода, и какая ему замена? Шаблоны? |
| Автор: fish9370 19.7.2011, 00:04 |
ужас такого подхода в том, что дизайн для такого сайта переделать практически нереально.. в таком проекте нельзя произвести разделение труда между программистом и дизайнером (верстальщиком).. да и просто сложно потом копаться.. выход - конечно шаблоны.. и лично я сторонник не нативных шаблонов.. |
| Автор: нуп 19.7.2011, 00:59 |
| Покажите пример как вы бы написали вывод html кода. |
| Автор: fish9370 19.7.2011, 09:33 | ||||
пожалуйста:
вот что-то типа того.. как видете, шаблон можно спокойно отдать дизайнеру (верстальщику), на любой стадии проекта.. если нужно переделать дизайн, нужно только переделать шаблон.. код остается.. так я поступаю всегда, даже если мне нужно всего лишь вывести простое сообщение, никогда не знаешь как это сообщение должно будет выглядеть завтра.. |
| Автор: fish9370 19.7.2011, 09:57 |
| и что касается, первоначальной темы, быть может есть смысл, передавать данные в виде JSON.. и лично я бы отказался от механизма form вообще, передавал бы данные аджаксом - но на этом я не настаиваю (хотя считаю так удобнее) |