Im создает модальный блок, который включает форму. Форма затем вернет вход, однажды отправленный с использованием ajax и php, и модальный блок затем должен исчезнуть. Проблема заключается в том, что результат показывается в течение нескольких секунд, прежде чем окно исчезнет, и страница обновится.
<button class="toggleModal">trigger iModal</button> <div class="modal"> <header> <h2>Other Symptoms</h2> <i class="fa fa-times close toggleModal"></i> </header> <section> <form class="js-ajax-php-json" method="post" accept-charset="utf-8"> <textarea name="textareathebeast" row="4" cols="40" placeholder="some text"></textarea><br> <input class="modalSubmit" type="submit" name="submit" value="submit"> </form> </section> </div> <div class="the-return"> [HTML is replaced when successful.] </div> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
>
$(function(){ $('.toggleModal').on('click', function (e) { $('.modal').toggleClass('active'); }); $(".js-ajax-php-json").submit(function(){ var data = { "action": "test" }; data = $(this).serialize() + "&" + $.param(data); $.ajax({ type: "POST", dataType: "json", url: "response.php", data: data, success: function(data) { $(".the-return").html( "Text Message: " + data["textareathebeast"] ); } }); return true; }); }); </script>
<
<?php if (is_ajax()) { if (isset($_POST["action"]) && !empty($_POST["action"])) { //Checks if action value exists $action = $_POST["action"]; switch($action) { //Switch case for value of action case "test": test(); break; } } } //Function to check if the request is an AJAX request function is_ajax() { return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'; } function test(){ $return = $_POST; //Do what you need to do with the info. The following are some examples. //if ($return["favorite_beverage"] == ""){ // $return["favorite_beverage"] = "Coke"; //} //$return["favorite_restaurant"] = "McDonald's"; $return["json"] = json_encode($return); echo json_encode($return); } ?>
Отправка формы подразумевает множество действий по умолчанию, таких как перезагрузка текущей страницы с результатами представления (даже если форма не имеет action
, страница все равно будет обновляться). Ваш вызов ajax в обработчике отправки выполняется в ДОПОЛНЕНИИ для поведения по умолчанию, а не вместо него. Вы можете предотвратить поведение по умолчанию в обработчике отправки следующим образом:
$(".js-ajax-php-json").submit(function(event){ event.preventDefault();
Похоже, причина его обновления заключается в том, что вы вызываете функцию отправки, не предотвращая операцию по умолчанию после строки $(".js-ajax-php-json").submit(function(){
вам нужно предотвратить это:
e.preventDefault();
Если нет, вы можете попытаться предотвратить помеченное по умолчанию событие по умолчанию, а не событие отправки.
При использовании формы с кнопкой отправки браузер все равно выполнит обратную передачу. Поэтому я предлагаю заменить тип ввода = «отправить» с типом ввода = «кнопка». Затем добавьте обработчик для «щелчка» этой кнопки (вместо события отправки формы). Вам также нужно будет прочитать значение textarea и поместить это значение в передаваемые данные.