我正在使用下面的php PDO和ajax程序在帖子上提交用户评论。起初,当我这样做时,它工作正常,但现在它停止工作,我做错了什么,有人可以为我解决这个问题或决定更好的方法来实现它吗?
问题目前,当我提交回复时,它会发布到我的数据库,但它不会从服务器返回消息。示例:当我发布"hello"
时,我希望它立即显示它而无需重新加载页面。
这里是阿贾克斯
<script>
$(document).ready(function(){
$('#add-comment').submit(function()
{
var comment = $('#comment').val();
var name = $('#anony').val();
var rid = $('#rid').val();
$('#response-out').html("<i class='fa fa-spinner fa-spin' style='font-size:19px;'></i>");
$.ajax({
type: 'POST',
url: '/alter_reply.php',
data: 'comment='+comment+'&name='+name+'&rid='+rid,
})
.done(function(data){
$('#response-out').html(data);
})
.fail(function() {
alert( "Posting failed." );
});
return false;
});
});
</script>
alter_reply.php
<?php
if($_POST){
$db_host = "localhost";
$db_user = "root";
$db_pass = "pass";
$db_name = "cods";
try {
$db_conn = new PDO("mysql:host={$db_host};dbname={$db_name}",$db_user,$db_pass);
$db_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $db_conn->prepare("INSERT INTO replys(rid,mesreplys,rtime,rusername) VALUES(:rid,:mesreplys,:rtime,:rusername)");
$stmt->bindParam(':rid', $rid);
$stmt->bindParam(':mesreplys', $comment);
$stmt->bindParam(':rtime', $timedate);
$stmt->bindParam(':rusername', $user);
$form = $_POST;
$rid = mysql_real_escape_string($form['rid']);
$comment = mysql_real_escape_string($form['comment']);
$timedate = date("Y-m-d H:i:s");
if(isset($_SESSION['username'])){
$user = $_SESSION['username'];
}else{
$anony_user = mysql_real_escape_string($form['name']);
$user = $anony_user;
}
$stmt->execute();
//I don't know how to do it again that why i echo back the submitted values
//if you can do it more better for me i will appricite
echo "<td><table>
<tbody>
<tr>
<td class='comment-score'>
</td>
<td>
</td>
</tr>
</tbody>
</table>
</td>";
echo "<td class='comment-text'>
<div style='display: block;' class='comment-body'>";
echo "<span class='comment-copy'>";
echo "$comment";
echo "</span> <a href='' class='comment-user'>";
echo "$user";
echo "</a> <span class='comment-date' dir='ltr'> @<a class='comment-link' href='#'><span title='' class='relativetime-clean'>";
echo "$timedate";
echo "</span></a></span></div></td>";
}
catch(PDOException $e)
{
echo "Error:" . $e->getMessage();
}
$db_conn = null;
}
?>
这是网页
<div id="response-out" class='comment'> </div>
<form id="add-comment" action="javascript:void(0);" style="font-size: 100%;">
<textarea placeholder="" name="comment" cols="68" rows="3" style="min-height:30px;" id="comment" required="true"></textarea>
<br/>
<?php
if(!isset($_SESSION['username'])) {
echo "<label>Enter name</label><br>";
echo "<input placeholder='Enter a name' style='width:130px;height: inherit;' required='true' id='anony' type='text' name='name'/>";
}?>
<input tabindex="0" value="Add Comment" class="btnpostq" id="donedbtn" type="submit"/>
<input type="hidden" value="<?php echo $_GET['postid'];?>" name="rid" id="rid"/>
</form>
首先:请检查您的 php 错误是否显示。然后,我想你正在使用像FireBug这样的调试器来检查你的javascript和AJAX请求。如果没有,请配置 php 错误并为浏览器安装调试器。如果是,请确认您没有JS错误或AJAX返回的PHP错误。
我回答的目的是首先清理您的代码并尝试避免错误。
Javascript :
<script>
$(document).ready(function(){
$('#add-comment').submit(function()
{
var comment = $('#comment').val();
var rid = $('#rid').val();
// Check if anony exist to avoid JS error
if(0 < $('#anony').length)
{
var name = $('#anony').val();
var dataToSend = 'comment='+comment+'&rid='+rid;
}
else
{
var name = '';
var dataToSend = 'comment='+comment+'&rid='+rid;
}
var dataToSend =
$('#response-out').html("<i class='fa fa-spinner fa-spin' style='font-size:19px;'></i>");
$.ajax({
type: 'POST',
url: '/alter_reply.php',
data: dataToSend,
})
.done(function(data){
$('#response-out').html(data);
})
.fail(function() {
alert( "Posting failed." );
});
return false;
});
});
</script>
.PHP:
if(0 < sizeof($_POST))
{
//First retrieve your data
$form = $_POST;
$rid = $form['rid'];
$comment = $form['comment'];
$timedate = date("Y-m-d H:i:s");
if(isset($_SESSION['username'])){
$user = $_SESSION['username'];
}else{
$anony_user = $form['name'];
$user = $anony_user;
}
$db_host = "localhost";
$db_user = "root";
$db_pass = "pass";
$db_name = "cods";
try
{
$db_conn = new PDO("mysql:host={$db_host};dbname={$db_name}",$db_user,$db_pass);
$db_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $db_conn->prepare("INSERT INTO replys(rid,mesreplys,rtime,rusername) VALUES(:rid,:mesreplys,:rtime,:rusername)");
//Now you have first retrieve data, you can bind
$stmt->bindParam(':rid', $rid);
$stmt->bindParam(':mesreplys', $comment);
$stmt->bindParam(':rtime', $timedate);
$stmt->bindParam(':rusername', $user);
$stmt->execute();
}
catch(PDOException $e)
{
echo "Error:" . $e->getMessage();
}
$db_conn = null;
//I don't know how to do it again that why i echo back the submitted values
//if you can do it more better for me i will appricite
//Cleaning HTML : your tags where crossing and you were including spans in spans, not sure its usefull
echo
'<table>'.
'<tbody>'.
'<tr>'.
'<td class="comment-score">'.
' '.
'</td>'.
'<td>'.
' '.
'</td>'.
'</tr>'.
'<tr>'.
'<td class="comment-text">'.
'<div style="display: block;" class="comment-body">'.
'<span class="comment-copy">'.$comment.'</span>'.
'<a href="" class="comment-user">'.$user.'</a>'.
'<span class="comment-date" dir="ltr">'.
'@<a class="comment-link relativetime-clean" href="#">'.$timedate.'</a>'.
'</span>'.
'</div>'.
'</td>'.
'</tr>'.
'</tbody>'.
'</table>';
}
else
{
echo 'no data';
}
我终于找到了解决问题的方法这是我所做的并且工作正常
$(document).ready(function(e){
$("#add-comment").submit(function(){
var comment = $('#comment').val();
var name = $('#anony').val();
var rid = $('#rid').val();
$.ajax({
url:'/alter_reply.php',
data:'comment='+comment+'&name='+name+'&rid='+rid,
type: "POST",
beforeSend: function(){
$('#response-out').html("<i class='fa fa-spinner fa-spin' style='font-size:19px;'></i>");
},
success: function(data){
$('#response-out').html(data);
}
});
});
});