Ajax 无法使用按钮
Ajax not working with button
我的发送按钮不起作用。脚本不应该带我去 add.php 吗?
但不是它,而是刷新页面?如何以及为什么?请帮帮我
它在没有 Ajax 脚本的情况下工作。
明天是我的实验室考试,我无法使事情正常进行。
我应该对其进行哪些更改才能解决问题。
<script
src="https://code.jquery.com/jquery-3.2.1.min.js"
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
crossorigin="anonymous"></script>
</head>
<body>
<a class="btn btn-outline-primary" href="index.php">Home</a>
<br/><br/>
<form method="post" id="form1">
<table width="25%" border="0">
...
...
<tr>
<td><input class="btn btn-primary" type="reset"
name="Clear" value="Clear"></td>
<td><input type="button" value="send" id="asdasd"
name="Submit" /></td>
</tr>
</table>
</form>
<script>
$(document).ready(function(e){
$("#form1").click(function() {
var name=$('#name').val();
var email=$('#email').val();
var age=$('#age').val();
var status=$('#status').val();
$.ajax({
type: "POST",
url: '../crud/add2.php',
data: $('#form1').serialize()
});
});
});
</script>
这是我的 add.php 文件
<body>
<?php
//including the database connection file
include_once("config.php");
if(isset($_POST)) {
$name = mysqli_real_escape_string($mysqli, $_POST['name']);
$age = mysqli_real_escape_string($mysqli, $_POST['age']);
$email = mysqli_real_escape_string($mysqli, $_POST['email']);
$status = mysqli_real_escape_string($mysqli, $_POST['status']);
// checking empty fields
if(empty($name) || empty($age) || empty($email)|| empty($status)) {
if(empty($name)) {
echo "<font color='red'>Name field is empty.</font><br/>";
}
if(empty($age)) {
echo "<font color='red'>Age field is empty.</font><br/>";
}
if(empty($email)) {
echo "<font color='red'>Email field is empty.</font><br/>";
}
if(empty($status)) {
echo "<font color='red'>Status field is empty.</font><br/>";
}
//link to the previous page
echo "<br/><a href='javascript:self.history.back();'>Go Back</a>";
} else {
// if all the fields are filled (not empty)
//insert data to database
$result = mysqli_query($mysqli, "INSERT INTO
users(name,age,email,Status)
VALUES('$name','$age','$email','$status')");
//display success message
echo "<font color='green'>Data added successfully.";
echo "<br/><a href='index.php'>View Result</a>";
}
}
else {
echo "<font color='green'>NOOOOOOO added successfully.";
echo "<br/><a href='index.php'>View Result</a>";
}
?>
</body>
</html>
好的,正如您所说,您需要在实验考试中使用 ajax 以下是 ajax 完成后如何重定向:
<script>
$(document).ready(function(){
$("#asdasd").click(function(e) {
var name=$('#name').val();
var email=$('#email').val();
var age=$('#age').val();
var status=$('#status').val();
$.ajax({
type: "POST",
url: '../crud/add2.php',
data: $('#form1').serialize()
}).done(function(data){
window.location.href = "add.php"; // or whatever redirect you want
});
});
});
</script>
我也不确定您是否理解重定向到 add.php 后您将不会以这种方式获得 $_POST 数据。我不太确定你为什么要在最开始的地方重定向到 add.php 因为 ajax 无论如何都会执行你的脚本(虽然那是 add2.php 而不是 add.php 但我认为它只是错别字之类的)。您可以改为将 ajax 的输出附加到当前页面的正文中(这是 ajax 的基本用途 - 无需重定向)。但是,如果您想使用 ajax 添加数据,并在将自己重定向到 add.php 页面时获取 POSTed 数据,则需要这样的东西:
像这样更改添加操作以形成标签:
<form method="post" id="form1" action="add.php">
然后脚本将如下所示:
<script>
$(document).ready(function(){
$("#asdasd").click(function(e) {
e.preventDefault();
var name=$('#name').val();
var email=$('#email').val();
var age=$('#age').val();
var status=$('#status').val();
$.ajax({
type: "POST",
url: '../crud/add2.php',
data: $('#form1').serialize()
}).done(function(data){
$soap('#form1').submit();
});
});
});
</script>
但是这样它会将同一行添加到您的数据库中两次。
最终更新:
好的,如您所愿,在评论中 add.php 看起来像这样:
//including the database connection file
include_once("config.php");
if(isset($_POST)) {
$name = mysqli_real_escape_string($mysqli, $_POST['name']);
$age = mysqli_real_escape_string($mysqli, $_POST['age']);
$email = mysqli_real_escape_string($mysqli, $_POST['email']);
$status = mysqli_real_escape_string($mysqli, $_POST['status']);
// checking empty fields
$result = array();
if(empty($name) || empty($age) || empty($email)|| empty($status)) {
if(empty($name)) {
$result['error']['name'] = 'Name field is empty.';
}
if(empty($age)) {
$result['error']['age'] = 'Age field is empty.';
}
if(empty($email)) {
$result['error']['email'] = 'Email field is empty.';
}
if(empty($status)) {
$result['error']['status'] = 'Status field is empty.';
}
} else {
// if all the fields are filled (not empty)
//insert data to database
$result = mysqli_query($mysqli, "INSERT INTO
users(name,age,email,Status)
VALUES('$name','$age','$email','$status')");
//display success message
$result['success'] = "<font color='green'>Data added successfully.".
"<br/><a href='index.php'>View Result</a>";
}
} else {
$result['error_message'] = "<font color='green'>NOOOOOOO added successfully.".
"<br/><a href='index.php'>View Result</a>";
}
echo json_encode($result);
脚本部分:
<script>
$(document).ready(function(){
$("#asdasd").click(function(e) {
$.ajax({
type: "POST",
url: '../crud/add.php',
data: $('#form1').serialize(),
dataType: 'json'
}).done(function(data){
if(data.hasOwnProperty('error_message')){
$('#form1').after(data['error_message']);
} else if(data.hasOwnProperty('error')){
for(var key in data['error']) {
if (data['error'].hasOwnProperty(key)) {
$('#'+key).after(data['error'][key]);
}
}
} else if(data.hasOwnProperty('success')){
$('#form1').after(data['success']);
}
});
});
});
</script>
请使用按钮 ID 创建点击事件,而不是表单 ID。我已经在您的 ajax 脚本中进行了修改,请试试这个脚本。
<script>
$(document).ready(function(e){
$("#asdasd").click(function() {
var name=$('#name').val();
var email=$('#email').val();
var age=$('#age').val();
var status=$('#status').val();
$.ajax({
type: "POST",
url: '../crud/add2.php',
data: $('#form1').serialize()
});
});
});
$(function () {
$('#form1').on('submit', function (e) {
e.preventDefault();
$.ajax({
type: 'post',
url: 'add.php',
data: $('#form1').serialize(),
success: function (data) {
alert('form was submitted');
},
error: function () {
alert('error');
}
});
});
});
两个文件.php.html都必须有一个js文件,里面放了上面的代码。
这对我有用。
我的发送按钮不起作用。脚本不应该带我去 add.php 吗? 但不是它,而是刷新页面?如何以及为什么?请帮帮我 它在没有 Ajax 脚本的情况下工作。
明天是我的实验室考试,我无法使事情正常进行。
我应该对其进行哪些更改才能解决问题。
<script
src="https://code.jquery.com/jquery-3.2.1.min.js"
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
crossorigin="anonymous"></script>
</head>
<body>
<a class="btn btn-outline-primary" href="index.php">Home</a>
<br/><br/>
<form method="post" id="form1">
<table width="25%" border="0">
...
...
<tr>
<td><input class="btn btn-primary" type="reset"
name="Clear" value="Clear"></td>
<td><input type="button" value="send" id="asdasd"
name="Submit" /></td>
</tr>
</table>
</form>
<script>
$(document).ready(function(e){
$("#form1").click(function() {
var name=$('#name').val();
var email=$('#email').val();
var age=$('#age').val();
var status=$('#status').val();
$.ajax({
type: "POST",
url: '../crud/add2.php',
data: $('#form1').serialize()
});
});
});
</script>
这是我的 add.php 文件
<body>
<?php
//including the database connection file
include_once("config.php");
if(isset($_POST)) {
$name = mysqli_real_escape_string($mysqli, $_POST['name']);
$age = mysqli_real_escape_string($mysqli, $_POST['age']);
$email = mysqli_real_escape_string($mysqli, $_POST['email']);
$status = mysqli_real_escape_string($mysqli, $_POST['status']);
// checking empty fields
if(empty($name) || empty($age) || empty($email)|| empty($status)) {
if(empty($name)) {
echo "<font color='red'>Name field is empty.</font><br/>";
}
if(empty($age)) {
echo "<font color='red'>Age field is empty.</font><br/>";
}
if(empty($email)) {
echo "<font color='red'>Email field is empty.</font><br/>";
}
if(empty($status)) {
echo "<font color='red'>Status field is empty.</font><br/>";
}
//link to the previous page
echo "<br/><a href='javascript:self.history.back();'>Go Back</a>";
} else {
// if all the fields are filled (not empty)
//insert data to database
$result = mysqli_query($mysqli, "INSERT INTO
users(name,age,email,Status)
VALUES('$name','$age','$email','$status')");
//display success message
echo "<font color='green'>Data added successfully.";
echo "<br/><a href='index.php'>View Result</a>";
}
}
else {
echo "<font color='green'>NOOOOOOO added successfully.";
echo "<br/><a href='index.php'>View Result</a>";
}
?>
</body>
</html>
好的,正如您所说,您需要在实验考试中使用 ajax 以下是 ajax 完成后如何重定向:
<script>
$(document).ready(function(){
$("#asdasd").click(function(e) {
var name=$('#name').val();
var email=$('#email').val();
var age=$('#age').val();
var status=$('#status').val();
$.ajax({
type: "POST",
url: '../crud/add2.php',
data: $('#form1').serialize()
}).done(function(data){
window.location.href = "add.php"; // or whatever redirect you want
});
});
});
</script>
我也不确定您是否理解重定向到 add.php 后您将不会以这种方式获得 $_POST 数据。我不太确定你为什么要在最开始的地方重定向到 add.php 因为 ajax 无论如何都会执行你的脚本(虽然那是 add2.php 而不是 add.php 但我认为它只是错别字之类的)。您可以改为将 ajax 的输出附加到当前页面的正文中(这是 ajax 的基本用途 - 无需重定向)。但是,如果您想使用 ajax 添加数据,并在将自己重定向到 add.php 页面时获取 POSTed 数据,则需要这样的东西:
像这样更改添加操作以形成标签:
<form method="post" id="form1" action="add.php">
然后脚本将如下所示:
<script>
$(document).ready(function(){
$("#asdasd").click(function(e) {
e.preventDefault();
var name=$('#name').val();
var email=$('#email').val();
var age=$('#age').val();
var status=$('#status').val();
$.ajax({
type: "POST",
url: '../crud/add2.php',
data: $('#form1').serialize()
}).done(function(data){
$soap('#form1').submit();
});
});
});
</script>
但是这样它会将同一行添加到您的数据库中两次。
最终更新: 好的,如您所愿,在评论中 add.php 看起来像这样:
//including the database connection file
include_once("config.php");
if(isset($_POST)) {
$name = mysqli_real_escape_string($mysqli, $_POST['name']);
$age = mysqli_real_escape_string($mysqli, $_POST['age']);
$email = mysqli_real_escape_string($mysqli, $_POST['email']);
$status = mysqli_real_escape_string($mysqli, $_POST['status']);
// checking empty fields
$result = array();
if(empty($name) || empty($age) || empty($email)|| empty($status)) {
if(empty($name)) {
$result['error']['name'] = 'Name field is empty.';
}
if(empty($age)) {
$result['error']['age'] = 'Age field is empty.';
}
if(empty($email)) {
$result['error']['email'] = 'Email field is empty.';
}
if(empty($status)) {
$result['error']['status'] = 'Status field is empty.';
}
} else {
// if all the fields are filled (not empty)
//insert data to database
$result = mysqli_query($mysqli, "INSERT INTO
users(name,age,email,Status)
VALUES('$name','$age','$email','$status')");
//display success message
$result['success'] = "<font color='green'>Data added successfully.".
"<br/><a href='index.php'>View Result</a>";
}
} else {
$result['error_message'] = "<font color='green'>NOOOOOOO added successfully.".
"<br/><a href='index.php'>View Result</a>";
}
echo json_encode($result);
脚本部分:
<script>
$(document).ready(function(){
$("#asdasd").click(function(e) {
$.ajax({
type: "POST",
url: '../crud/add.php',
data: $('#form1').serialize(),
dataType: 'json'
}).done(function(data){
if(data.hasOwnProperty('error_message')){
$('#form1').after(data['error_message']);
} else if(data.hasOwnProperty('error')){
for(var key in data['error']) {
if (data['error'].hasOwnProperty(key)) {
$('#'+key).after(data['error'][key]);
}
}
} else if(data.hasOwnProperty('success')){
$('#form1').after(data['success']);
}
});
});
});
</script>
请使用按钮 ID 创建点击事件,而不是表单 ID。我已经在您的 ajax 脚本中进行了修改,请试试这个脚本。
<script>
$(document).ready(function(e){
$("#asdasd").click(function() {
var name=$('#name').val();
var email=$('#email').val();
var age=$('#age').val();
var status=$('#status').val();
$.ajax({
type: "POST",
url: '../crud/add2.php',
data: $('#form1').serialize()
});
});
});
$(function () {
$('#form1').on('submit', function (e) {
e.preventDefault();
$.ajax({
type: 'post',
url: 'add.php',
data: $('#form1').serialize(),
success: function (data) {
alert('form was submitted');
},
error: function () {
alert('error');
}
});
});
});
两个文件.php.html都必须有一个js文件,里面放了上面的代码。 这对我有用。