Некорректно работает ajax
Добрый день
Помогите, пожалуйста, разобраться. Создаю форму для отправки данных пользователя в бд. <div id="modal_form"> <span id="modal_close">X</span> <form action="request_order.php" method="post" id="form_order"> <input class="input" type="text" name="name" id="name" size="30" tabindex="1" placeholder="Ваше имя" required> <input class="input" type="text" name="surname" id="surname" size="30" tabindex="2" placeholder="Ваша фамилия" required> <input class="input" type="text" name="phone" id="phone" size="30" tabindex="3" placeholder="Ваш телефон" required> <input class="input" type="text" name="email" id="email" size="30" tabindex="4" placeholder="Ваш email" required> <textarea name="add_info" id="add_info" class="textarea" rows="3" cols="40" tabindex="5">дополнительная информация (особый уход, привычки, распорядок и т.д.)</textarea> <input type="submit" class="submit_find" name="submit" value="Отправить"> </form> </div> Хочу отправить ее обработчику используя ajax: <script type="text/javascript"> $(document).ready(function(){ $("#form_order").submit(function() { var form_data = $(this).serialize(); $.ajax({ type: "POST", url: "request_order.php", data: form_data, success: function() { alert("Ваше сообщение отправлено!"); } }); }); }); </script> И получаю следующее: если убрать action="request_order.php" в форме, то данные в базу не добавляются, однако сообщение alert выскакивает, если оставить action="request_order.php" в форме, то сначала добавляются данные, затем alert, а затем перенаправления на "request_order.php". Вопрос: почему без action="request_order.php" в форме, данные не вставляются в бд, но я вижу alert? Как это исправить? Еще заметила что введенные в форму данные(но не отправленные в бд), отражаются в url(после alert), почему так? ведь я их передаю методом POST? |
|
После отправки данных из скрипта нужно прервать выполнения формы зашитые самим браузером ( вернуть false из обработчика submit например ) а со стороны сервера нужно принять и обработать данные которые вы отправляете с помощи аякса ...
|
Спасибо, прочла документацию, но видимо не до конца поняла.
Т.е. если я хочу, чтобы после того как нажму на submit отправлялись данные из формы, но при этом отменилось стандартное поведение submit (переход по action), мне нужно, например, добавить id="submit": <input id="submit" type="submit" class="submit_find" name="submit" value="Отправить"> и изменить js: <script type="text/javascript"> $(document).ready(function(){ $("#submit").click(function(e){ var form_data = $("#form_order").serialize(); $.ajax({ type: "POST", url: "request_order.php", data: form_data, success: function() { alert("Ваше сообщение отправлено!"); } }); e.preventDefault(); }); }); </script> Но при этом и передача данных "request_order.php" тоже отменяется. Что-то видимо делаю не так? |
Браузер сам умеет отправлять формы на сервер. Вы же делаете сбор данных формы и отправку самостоятельно из скрипта ... а браузер эту отправку дублирует и чтоб он это не делал ему надо об этом сообщить есть несколько вариантов сделать это но самый удобный на мой взгляд будит таким.
jQuery(function ( $ ) { $('#form_order').submit(function ( e ) { $.post( this.action, $( this ).serialize(), function ( data ) { alert("Ваше сообщение отправлено!"); } ); return false; // Отмена вшитых действий браузера. }); }); не совсем понял об отменился переход ... если нужен то можно назначить его через localhost.href |
Часовой пояс GMT +3, время: 06:05. |