Заметки программиста

Пишу о себе, о своей работе и о технологиях web программирования123

Хорошее название топика, правда? А названия топиков очень важны, по ним приходят из поисковиков и по названию человек сразу понимает то ли это что он искал. Теперь по сути.

Как люди в древнее время (когда не было jQuery) сабмитили форму на AJAX’е? Схема не сложна, но очень муторна, нужно составить либо строку из всех инпутов вида ?id=25&bring_me=pianino&verni_mena_na=nebo, либо в формате JSON, который опять же нужно парсить. Потом появились фреймворки и библиотеки умеющие делать это за нас, нужно было только указать что и куда передаем, т.е. типа того что: { id: document.getElementById(‘hidden_id’) .value, bring_me: document.getElementById(‘bring_me’) .value, …}, не очень удобно.

И тут появляется ОН jQuery, тот кто покорил самого Гугла! И был написан под него плагин jQuery Form Plugin, который делает всю работу по сабмиту формы за нас. Создаем форму используя самую обыкновенную верстку, без особых дополнений:

<form id="myForm" action="comment.php" method="post">
    Name: <input type="text" name="name" />
    Comment: <textarea name="comment"></textarea>
    <input type="submit" value="Submit Comment" />
</form>

Подключаем jQuery, сам Form Plugin и создаем небольшой обработчик для формы:

<head>
    <script type="text/javascript" src="path/to/jquery.js"></script>
    <script type="text/javascript" src="path/to/form.js"></script>

    <script type="text/javascript">
        // ожидаем загрузки всего документа
        $(document).ready(function() {
            // назначаем 'myForm' обрабатываемой формой и задаем ей простецкую функцию
            $('#myForm').ajaxForm(function() {
                alert("Спасибо за комментарий!");
            });
        });
    </script>
</head>

И все дела! Теперь вместо сабмита формы произойдет AJAX запрос на сервер по ссылке из action с данными из нашей формы! Так же плагин поддерживает и AJAX загрузку файлов! Описание плагина и скачать его можно на этом сайте – http://malsup.com/jquery/form/.

Comments

There are 35 comments for this post.

  1. Павел on Ноябрь 30, 2008 2:15 дп

    Тестил в IE6 – ошибка JavaScript возникает при попытке обзора файлов. Будут еще версии обновленные?

  2. dust on Ноябрь 30, 2008 2:35 дп

    > Павел
    http://malsup.com/jquery/form/#code-samples
    зайдите в File upload и проверьте, пробовал на IE 6 все работает

  3. Олег on Декабрь 1, 2008 8:19 пп

    В файрфоксе такая же ошибка про javascript

  4. Наталья on Декабрь 8, 2008 9:03 пп

    где брать файл comment.php ?

  5. unders0n on Март 21, 2009 11:38 пп

    а вот не подскажите как с кодировкой виндовой быть (на УТФ перейти возможности нет)

  6. dust on Март 21, 2009 11:43 пп

    Если есть на php расширение iconv, то проблем никаких:

    1. Если форма сабмитится без файлов, то iconv(‘utf-8′, ‘windows-1251′, $_POST['name']); и так с каждым полем.

    2. Если форма без файлов, то перекодировать ничего не надо, так как в этом случае ajaxForm передает форму через iframe и кодировка не меняется.

  7. Вадим on Апрель 16, 2009 10:14 пп

    dust, большое спасибо, что написали про iconv, помогло исправить кодировку.

  8. Vela on Июль 17, 2009 1:29 пп

    спасибо помог автор!!! зачет тебе++++

  9. Рустем on Июль 23, 2009 12:02 пп

    Под Opera 10 не работает. Форма сабмитетса, но респонса нет. Причем так, только в 10 (alpha,beta, все, все вообщем). Такой же глюк и на оф. сайте плагина.
    Досадно, что использую я этот плагин в большом проекте, и теперь такая засада. Может както это решаемо?

  10. Антонов Андрей on Июль 23, 2009 12:23 пп

    Ну если проект на запад, то проблем нет, там опера – труп, а вот если проект наш… то это проблема, к сожалению опера еще жива…

  11. вапва on Август 26, 2009 12:59 пп

    sdfsdfsdfsdfsdf

  12. вапва on Август 26, 2009 1:05 пп

    fdgfdgf

  13. вапва on Август 26, 2009 1:06 пп

    dfgfdfffffffffffff

  14. вапва on Август 26, 2009 1:06 пп

    fghfghfgh

  15. nezabor on Август 26, 2009 1:37 пп

    Люди подскажите
    предоставленный здесь код он точно работает
    или что-то надо добавлять

  16. Антонов Андрей on Август 26, 2009 4:30 пп

    Нужно как в примере подключить jQuery и Form Plugin, а так да, работает.

  17. Anree on Сентябрь 3, 2009 11:59 дп

    только вот я не понял, что всё таки с файлом – comment.php ? поясните.
    Я бы в таких случаях выкладывал рабочий пример архивом. не было бы столько вопросов.

  18. Антонов Андрей on Сентябрь 3, 2009 2:25 пп

    comment.php это условный файл, т.е. там содержится код для добавления комментария в вашу базу. Приведу для примера запрос, но только как пример:

    $sql = "INSERT INTO `comments` (`name`,`comment`) VALUES ('".addslashes($_POST['name'])."', '".addslashes($_POST['comment'])."')";

  19. org on Сентябрь 7, 2009 5:27 пп

    что значит "к сожалению опера еще жива"?? опера – руль. а вот ие6 (да и всё ослиное семейство) – мастдай. ФФ – тежеловесная, использую её только для дебага

  20. org on Сентябрь 7, 2009 5:30 пп

    "Описание плагина и скачать его можно на этом сайте" – мозг выпал от этой фразы…. капец… промптом переводил чтоль??

  21. Антонов Андрей on Сентябрь 7, 2009 5:57 пп

    Простите, не хотел вас травмировать.

  22. SkPavel on Сентябрь 13, 2009 9:01 дп

    да с Opera 10 проблема, можт кто сможет подсказать решение данной проблемы

  23. Punches on Сентябрь 30, 2009 2:36 пп

    Зачёт!!

  24. Серж on Май 17, 2010 8:44 дп

    Пример работает при простом случае, а если формы вложенные одна в другую – тогда нет. :-(

    <form name="MainForm1" target="senddata">

    <form id="myForm" action="save_comment.php" method="post">
    Name: <input type="text" name="good_id" />
    Comment: <textarea name="good_comment"></textarea>
    <input type="submit" value="Submit Comment" />
    </form>

    <input type="submit" value="send_main_form">
    </form>

    и что же делать ? :-(
    если нажимаю кнопку "Submit Comment" – попадаю на новую страницу

  25. Это я on Май 25, 2010 11:15 дп

    форма в форме это бред

  26. Антонов Андрей on Май 25, 2010 11:19 дп

    Советую все-таки разделить формы, они не должны быть вложенными, в нормальном случае.

  27. EnChikiben on Декабрь 8, 2010 3:32 пп

    Как сделать чтобы форма не перезагружала страницу?

  28. hippycore on Февраль 23, 2011 10:24 пп

    а если comment.php на удаленном сервере? будет отправлять?

  29. Gelen on Март 9, 2011 5:18 пп

    Спасибо за код. Будем пользоваться.

  30. kvins on Март 12, 2011 1:45 дп

    >>>Тестил в IE6
    о боже вы сума сошли?? скока можно уже поддерживать ие 6 это уже идеотизм такой же как разрешение страницы по ширине 800 px

  31. kvins on Март 12, 2011 1:49 дп

    нет слов

  32. kvins on Март 12, 2011 1:58 дп

    о боже еще 1 , да забудь те вы о ие 6 . если на мой сайт кто нить зайдет под ие6 то мне его не жалко даже если он дурак такой)

  33. vaklip on Май 26, 2011 4:42 пп

    Ты даже представить себе не можешь, сколько людей в нашей стране трепетно оберегают эту версию браузера.
    Код обязательно применю, утащил в закладки.

  34. klide on Октябрь 26, 2011 12:37 пп

    Есть еще один подобный плагин, сам его использую, назывется jQueryQuickForm http://qdinov.ru/quickform/

  35. krolik on Декабрь 1, 2011 3:49 дп

    ссылка дохлая…

Write a Comment

Let me know what you think?