Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.07.2016, 10:12
Интересующийся
Отправить личное сообщение для nina_ Посмотреть профиль Найти все сообщения от nina_
 
Регистрация: 26.06.2016
Сообщений: 29

Некорректно работает 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?

Последний раз редактировалось nina_, 07.07.2016 в 10:20.
Ответить с цитированием
  #2 (permalink)  
Старый 07.07.2016, 11:44
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,663

nina_, JS: Действия браузера по умолчанию; jQuery JS: .submit(), event.preventDefault()
Ответить с цитированием
  #3 (permalink)  
Старый 07.07.2016, 15:21
Аватар для dd_smol
Кандидат Javascript-наук
Отправить личное сообщение для dd_smol Посмотреть профиль Найти все сообщения от dd_smol
 
Регистрация: 08.03.2015
Сообщений: 131

После отправки данных из скрипта нужно прервать выполнения формы зашитые самим браузером ( вернуть false из обработчика submit например ) а со стороны сервера нужно принять и обработать данные которые вы отправляете с помощи аякса ...
Ответить с цитированием
  #4 (permalink)  
Старый 07.07.2016, 17:02
Интересующийся
Отправить личное сообщение для nina_ Посмотреть профиль Найти все сообщения от nina_
 
Регистрация: 26.06.2016
Сообщений: 29

Спасибо, прочла документацию, но видимо не до конца поняла.
Т.е. если я хочу, чтобы после того как нажму на 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" тоже отменяется.
Что-то видимо делаю не так?
Ответить с цитированием
  #5 (permalink)  
Старый 07.07.2016, 17:18
Аватар для dd_smol
Кандидат Javascript-наук
Отправить личное сообщение для dd_smol Посмотреть профиль Найти все сообщения от dd_smol
 
Регистрация: 08.03.2015
Сообщений: 131

Браузер сам умеет отправлять формы на сервер. Вы же делаете сбор данных формы и отправку самостоятельно из скрипта ... а браузер эту отправку дублирует и чтоб он это не делал ему надо об этом сообщить есть несколько вариантов сделать это но самый удобный на мой взгляд будит таким.

jQuery(function ( $ ) {
	$('#form_order').submit(function ( e ) {
		$.post( this.action, $( this ).serialize(), function ( data ) {
			alert("Ваше сообщение отправлено!");
		} );


		return false; // Отмена вшитых действий браузера.
	});
});


не совсем понял об отменился переход ... если нужен то можно назначить его через localhost.href

Последний раз редактировалось dd_smol, 07.07.2016 в 17:33.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипт некорректно работает в IE Nataly12 Мобильный JavaScript 0 01.10.2015 10:40
Не работает ajax при OnClick по ссылке firefox govorusha AJAX и COMET 8 06.06.2015 14:34
Как работает обработчик в файле, подгруженном AJAX SweetySugar AJAX и COMET 1 20.08.2011 17:17
LightBox + ajax = Не работает ((( xmartinesx jQuery 2 11.10.2010 16:32
При наборе адреса с www не работает AJAX (JQuery)! madmis AJAX и COMET 3 23.11.2009 19:03