[关闭]
@greenfavo 2015-10-02T20:22:13.000000Z 字数 2518 阅读 703

php学习笔记(四)ajax无刷新评论

php


一,前言

用ajax写了个无刷新的评论demo,用户发表评论后不用刷新页面就可以看到自己的评论在当前页显示出来。这次的评论显示并不是直接从后台获取的,而是把数据传到后台然后存入数据库,前端显示的内容是直接从客户端获取,而不是后台返回的数据,减少了服务端的访问量。

二,前端代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>无刷新评论</title>
  6. <style type="text/css">
  7. #author,#email{
  8. width: 200px;
  9. height: 20px;
  10. margin-bottom: 20px;
  11. }
  12. #submit{
  13. background: white;
  14. border:1px solid #ccc;
  15. width: 80px;
  16. height: 30px;
  17. margin-top: 20px;
  18. }
  19. .commentlist{
  20. border: 1px solid #ccc;
  21. width: 300px;
  22. padding: 10px;
  23. margin: 20px 10px;
  24. }
  25. </style>
  26. </head>
  27. <body>
  28. <div id="comments">
  29. <!-- 加载评论内容 -->
  30. </div>
  31. <h1>发表评论</h1>
  32. <form>
  33. 昵称:<input type="text" id="author" required="required"/><br/>
  34. 邮箱:<input type="email" id="email" required="required"/><br/>
  35. 内容:<textarea id="content" cols="30" rows="3" required="required"></textarea><br/>
  36. <input type="button" id="submit" value="发表评论"/>
  37. </form>
  38. <script src="jquery.min.js"></script>
  39. <script type="text/javascript">
  40. $(function() {
  41. $.ajax({
  42. type: "get",
  43. url: "comments.php?act=load&id="+Math.random(),
  44. beforeSend:function(){
  45. $("#comments").text("评论加载中...");
  46. },
  47. error:function(){
  48. $("#comments").text("获取评论信息失败!");
  49. },
  50. success:function(data){
  51. $("#comments").html(data);
  52. }
  53. })
  54. $("#submit").click(function(data){
  55. var author=$("#author").val();
  56. var email=$("#email").val();
  57. var content=$("#content").val();
  58. if (author&&email&&content) {//如果评论内容不为空
  59. $.post("comments.php",{
  60. author:author,
  61. email:email,
  62. content:content,
  63. act:"add"//添加评论
  64. },function(data){
  65. if (data==1) {//如果发表成功
  66. $("form").trigger('reset');//模拟重置表单
  67. var d=new Date();
  68. //格式化时间
  69. var time=d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate()+" "+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds();
  70. var newcom=
  71. "<div class='commentlist'>"
  72. +author+" 发表于 "+time+"<br/><br/>"
  73. +content+
  74. "</div>";
  75. $("#comments").prepend(newcom);//在前面添加
  76. $(".msg").remove();//当有评论时移除此提示
  77. };
  78. })
  79. }else{
  80. alert("请填写评论信息");
  81. }
  82. })
  83. });
  84. </script>
  85. </body>
  86. </html>

三,PHP处理

  1. <?php
  2. require 'conn.php';
  3. $act=$_REQUEST['act'];//获取act变量的值
  4. if ($act=="load") {//如果是请求载入评论
  5. $result=mysql_query("select * from comments order by id desc limit 3");
  6. if (mysql_num_rows($result)>0) {
  7. while ($row=mysql_fetch_assoc($result)) {
  8. echo "<div class='commentlist'>".$row['author']." 发表于 ".$row['date']."<br/><br/>".$row['content']."</div>";
  9. }
  10. }else{
  11. echo "<p class='msg'>目前还没有用户评论!</p>";
  12. }
  13. }
  14. if ($act=="add") {
  15. $author=$_POST['author'];
  16. $email=$_POST['email'];
  17. $content=$_POST['content'];
  18. $date=date("Y-m-d H:i:s");
  19. $sql="insert into comments (author,email,content,date) values ('$author','$email','$content','$date')";
  20. if (mysql_query($sql)) {
  21. echo 1;//如果插入成功,则输出1给客户端
  22. }
  23. }
  24. ?>

四,总结

ajax功能很强大,可以神不知鬼不觉地和服务器交互,但有些客户端和服务端都相同的实时数据,可以直接从客户端获取,就不用从后台返回那么多数据了。代码就不详细解释了,有注释都看得懂。以后把这些文件都push到github上方便大家看也方便我以后忘了好查阅。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注