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

Каждый будний день, ровно в 9, я пишу о себе, о своей работе и о технологиях 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/.

This website uses IntenseDebate comments, but they are not currently loaded because either your browser doesn't support JavaScript, or they didn't load fast enough.

Comments

There are 26 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 дп

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

Write a Comment

Let me know what you think?