Php 我的ajax调用只工作了一次,但除非我刷新页面,否则它不会再次工作
我正在尝试使用Ajax创建一个表单。这是我试图输入的html部分Php 我的ajax调用只工作了一次,但除非我刷新页面,否则它不会再次工作,php,jquery,ajax,Php,Jquery,Ajax,我正在尝试使用Ajax创建一个表单。这是我试图输入的html部分 <form class="col s12"> <div class="row"> <div class="input-field col s6"> <i class="material-icons prefix">mode_edit</i> <textarea
<form class="col s12">
<div class="row">
<div class="input-field col s6">
<i class="material-icons prefix">mode_edit</i>
<textarea id="icon_prefix2" class="materialize-textarea" name ="discussion"></textarea>
<input type="hidden" name="user" value="<?php echo $_SESSION['userid'];?>">
<input type="hidden" name="id" value="<?php echo(rand(1000,99999)); ?>">
<input type="hidden" name="date" value="<?php echo date("d.m.Y"); ?>">
<input type="hidden" name="time" value="<?php echo date("h:i:s"); ?>">
<label for="icon_prefix2">Start your discsussion</label>
<input type="submit" class="btn waves-effect waves-light right" value="post">
</div>
</div>
</form>
这是将值存储在DB中的php代码:
<?php
session_start();
include_once('include/config.php');
$conn = config();
$uname = $_POST['user'];
$uid = $_POST['id'];
$val = $_POST['discussion'];
$date = $_POST['date'];`enter code here`
$time = $_POST['time'];
if (!$conn) {
$msg = "connection failed";
die($msg);
} else {
$query = "INSERT into cardiocase (id,uid,val,date,time) VALUES
(?,?,?,?,?);";
$stmt = $conn->prepare($query);
$stmt->bind_param('sssss',$uid,$uname,$val,$date,$time);
if($stmt->execute()){
echo "success";
}else{
echo "fail";
}
$stmt->close();
}
第一次存储该值。但是在成功消息之后,当我再次尝试输入时,它只是说已成功发布,但当我检查DB时,值不在那里。如果我刷新页面并再次尝试存储它。这样改进代码:
<form class="col s12">
<div class="row">
<div class="input-field col s6">
<i class="material-icons prefix">mode_edit</i>
<textarea id="icon_prefix2" class="materialize-textarea" name ="discussion"></textarea>
<label for="icon_prefix2">Start your discsussion</label>
<input type="submit" class="btn waves-effect waves-light right" value="post">
</div>
</div>
</form>
删除隐藏字段
然后在php文件中:
<?php
session_start();
include_once('include/config.php');
$conn = config();
$uname = $_SESSION['userid'];
$uid = echo(rand(1000,99999));;
$val = $_POST['discussion'];
$date = date("d.m.Y");
$time = date("h:i:s");
if (!$conn) {
$msg = "connection failed";
die($msg);
} else {
$query = "INSERT into cardiocase (id,uid,val,date,time) VALUES
(?,?,?,?,?);";
$stmt = $conn->prepare($query);
$stmt->bind_param('sssss',$uid,$uname,$val,$date,$time);
if($stmt->execute()){
echo "success";
}else{
echo "fail";
}
$stmt->close();
}
使用preventDefault可避免表单提交
$('body').on("click", '.btn', function (e) {
e.preventDefault(); // prevent default functionality
// run AJAX
});
看起来JS在什么地方出错了
用于查看AJAX结果是什么
$.ajax({
type: 'post',
url: 'cardiosubmit.php',
data: $('form').serialize(),
success: function () {
alert('successfully posted')
},
complete: function (data, textStatus) {
console.log(JSON.stringify(data));
console.log(textStatus);
}
});
使用以下代码
更改HTML帖子中的ur按钮
用这个更新js代码
`$.trigger-submit.offclick;
$.trigger-submit.onclick,函数{
$.ajax{
键入:“post”,
url:'cardiosubmit.php',
数据:$'form'。序列化,
成功:功能{
警报“已成功发布”
},
错误:函数{
警告“错误”
}
});
}“问题在于这一行
<input type="hidden" name="id" value="<?php echo(rand(1000,99999)); ?>">
试试这个!!!事实上我想提交表单。避免表单提交有什么用。但我还是尝试了这个。但仍然是相同的问题$'form'。serialize已经模拟表单提交您不需要提交表单,只需在单击事件时运行它即可。编辑我的答案以调试问题更好地查看服务器返回的是iudcardiocase DB中唯一的字段?我想您可能有兴趣从PHP获得响应:在页面顶部添加error_reportingE_ALL;ini_setdisplay_errors,1;,并在JS中使用PHP echo->success:function data{alertdata}+error:function request,status,error{alertrequest.responseText;}表中的“uid”“id”是主键井,您的隐藏输入在此处无效,请直接在php文件中生成这些值。了解了thanx:Dor只需在php文件中生成id。此字段在此处无效。同意,您可以在数据库中为表生成自动增量id
<input type="hidden" name="id" value="<?php echo(rand(1000,99999)); ?>">
$(function () {
$('form').on('submit', function (e) {
e.preventDefault();
//Generate random id for very ajax request.
$("[name='id']").val(Math.floor(Math.random() * 100));
$.ajax({
type: 'post',
url: 'cardiosubmit.php',
data: $('form').serialize(),
success: function () {
alert('successfully posted')
},
error: function () {
alert('error')
}
});
});
});
<form action="cardiosubmit.php" class="col s12" id="myfrm" method="post" name="myfrm" >
<div class="row">
<div class="input-field col s6">
<i class="material-icons prefix">mode_edit</i>
<textarea id="icon_prefix2" class="materialize-textarea" name ="discussion"></textarea>
<label for="icon_prefix2">Start your discsussion</label>
<input type="submit" class="btn waves-effect waves-light right" value="post">
</div>
</div>
</form>
<script type="text/javascript">
var frm = $('#myfrm');
frm.submit(function (e) {
e.preventDefault();
$.ajax({
type: frm.attr('method'),
url: frm.attr('action'),
data: frm.serialize(),
success: function (data) {
console.log('Submission was successful.');
console.log(data);
},
error: function (data) {
console.log('An error occurred.');
console.log(data);
},
});
});