В моей тестовой работе я хочу отправить данные в БД, нажав кнопку «Сохранить», и остаться на той же странице. Но эта кнопка после отправки данных в БД открывает /file.php и показывает «Успех». Пытался решить задачу найденным JS, но не получается.
$('#sub').click( function() {
$.post( $('myForm').attr('action'), $('#myForm :input').serializeArray(), function(info){ $('result').html(info);} );
clearInput();
});
$('myForm').submit(function() {
return false;
});
function clearInput() {
$('#myForm :input').each( function() {
$(this).val('');
});
}
<html>
<head>
<title>
OneTwoThree
</title>
</head>
<body>
<form id='myForm' action = "db.php" method = "post">
Name: <input type = "text" name = "name"><br>
Age: <input type = "text" name = "age"><br>
<button id = "sub">Send</button>
</form>
<span id = "result"></span>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src = "script/myjs.js" type = "text/javascript"></script>
</body>
</html>
Вызываемый файл PHP:
<?php
$conn = mysql_connect('localhost','root','');
$db = mysql_select_db('mytestbd');
$name = $_POST['name'];
$age = $_POST['age'];
$q = "INSERT INTO `post`(`number`, `sometext`) VALUES ('$age','$name')";
if (mysql_query($q))
echo "Success";
else
echo "Fail";
?>
попробуйте это: e.preventDefault ();
Спасибо, Санджай, я попробую сейчас
На самом деле вам нужно добавить e в $('#sub').click( function(e) { (сразу после 'function') ... ЗАТЕМ вы можете сделать e.preventDefault();
Пит, не могли бы вы ввести полную строку кода в правильной форме? Сам не могу найти ошибку. Это мой первый день в JS.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте этот блок js, который включает некоторые изменения и корректировки (указанные ниже):
$(document).ready(function() { // ready wrapper (was missing in your code)
$('#sub').click( function(e) { // added 'e'
e.preventDefault(); // added to stop buttons default behavior
$.post( $('#myForm').attr('action'), // added '#' to id locator
$('#myForm').serialize(), // reduced to just serialize the form data
function(info){
$('#result').html(info); // added '#' to id locator
clearInput(); // moved clear form into success callback
}
);
});
$('#myForm').submit(function() { // added '#' for id locator
return false; // this submit handler is most likely
}); // not needed, but doesnt hurt
function clearInput() {
$('#myForm :input').each( function() {
$(this).val('');
});
}
});
PS Как только вы начнете процесс отправки, вы захотите переключить использование функций mysql_* на mysqli или PDO (поскольку mysql_ обесценивается в php 5.5x и удаляется в php7 +).
Затем после переключения загляните в Подготовленные заявления, чтобы защититься от атак sql-инъекций.
Большое спасибо, IncredibleHat
Просто используйте инструкцию include.
if (mysql_query($q))
echo "Success";
include('yourFileWithTheForm.php');
else
echo "Fail";
?>
что "не работает"? Есть ошибки в вашей консоли? Также вы пропустили хеш:
$('result'), так что этот бит не будет делать ничего того же с вашей myForm - вот почему вы фактически отправляете форму, а не остаетесь на той же странице.