使用ajax获取内容并直接显示它们而不刷新页面

时间:2014-03-13 19:46:06

标签: php jquery ajax

我在php中创建了一个博客。对于每个评论,用户可以按收藏/不喜欢按钮(如果需要)来收藏/不喜欢帖子。我的按钮非常完美。我得到的唯一问题是,当用户按收藏夹/收藏夹...我没有得到这篇文章的收藏夹/不喜欢的数量。为了得到这个,每次我必须重新压缩页面。有些人告诉我,我需要使用Ajax才能做到这一点。

我使用表格喜欢,为每个帖子保存收藏:喜欢(like_id,user,the_comment_id) 我对aeach帖子使用表格评论:评论(comments_id,评论,用户)

这是我的PHP代码:

<?php

$comment_id = $row['comments_id'];

// ... code above

//button for favorite and unfavorite
 $get_button = mysql_query(" SELECT * FROM `likes` WHERE `user`='$session_user_id' AND `the_comment_id`='{$row['comments_id']}'  ");                    
 $get = mysql_fetch_assoc($get_button);

if($get==""){   
    $comments .= "<a role='button' class='button' id='like$comment_id'  style='color:grey;'>Favorite</a>";
}else if($get!=""){
    $comments .= "<a role='button' class='button' id='unlike$comment_id' style='color:grey;'>Unfavorite</a>";
}

// place favorites for this comment here
$comments .= " $total_favorites ";

?>

这是我的jquery:

<script>

$(document).ready(function(){
$("#like<?php echo $comment_id; ?>").click(function() { 
  var id = "<?php echo $comment_id; ?>";
  $.post("parse.php",{like:id}, function(data){

   $("#like<?php echo $comment_id; ?>");
   $(".button<?php echo $comment_id; ?>").html(data);

  });
  $(this).hide().attr("Disabled", "True").text("Favorite done!").show();
});


$("#unlike<?php echo $comment_id; ?>").click(function() { 

  var id = "<?php echo $comment_id; ?>";
  $.post("parse.php",{unlike:id}, function(data){

   $("#unlike<?php echo $comment_id; ?>");
   $(".button<?php echo $comment_id; ?>").html(data);

});     
$(this).hide().attr("Disabled", "True").text("Unfavorite done!").show();
 });

});

</script>

这是我的parse.php代码:

<?php  

if(isset($_POST['like'])){
 $id = $_POST['like'];      
  mysql_query("INSERT INTO likes VALUES ('', '$session_user_id', '$id') "); 
}


if(isset($_POST['unlike'])){
 $id = $_POST['unlike'];
 mysql_query(" DELETE FROM likes WHERE `user`='$session_user_id' AND `the_comment_id`='$id'  ");
}


$favorites = mysql_query(" SELECT * FROM `likes` WHERE `the_comment_id`='{$row['comments_id']}'  ");    
$total_favorites = mysql_num_rows($favorites);

?>

4 个答案:

答案 0 :(得分:2)

您需要从parse.php脚本返回一些内容。 data变量不包含计数,除非您在设置.html(data)值之前直接回显或返回JSON并在jQuery函数中解析。

答案 1 :(得分:1)

你是对的,AJAX是要走的路。请注意,AJAX有多个名称:

  • XMLHttpRequest - javascript
  • AJAX
  • $.ajax() - jQuery超集
  • $.get() - 使用$.ajax()
  • TYPE: "GET"的快捷方式
  • $.post() - 使用$.ajax()
  • TYPE: "POST"的快捷方式
  • $.load() - 请参阅Difference between $("#id").load and $.ajax?

以下是一些可以帮助您开始使用AJAX的示例:

A simple example

More complicated example

Populate dropdown 2 based on selection in dropdown 1

答案 2 :(得分:1)

除了Lucas所说的内容(请在获得代表时向他投票),请将代码更改为:

<?php  

    if(isset($_POST['like'])){
        $id = $_POST['like'];      
        mysql_query("INSERT INTO likes VALUES ('', '$session_user_id', '$id') "); 
    }

    if(isset($_POST['unlike'])){
        $id = $_POST['unlike'];
        mysql_query(" DELETE FROM likes WHERE `user`='$session_user_id' AND `the_comment_id`='$id'  ");
    }

    $favorites = mysql_query(" SELECT * FROM `likes` WHERE `the_comment_id`='{$row['comments_id']}'  ");    
    $total_favorites = mysql_num_rows($favorites);

    $out = '<h1>Found In Database</h1>';
    $out .= '<p>You received ' .$total_favorites. ' favorites.';

    echo $out;
?>

答案 3 :(得分:0)

如果这不起作用,请发布相关的HTML,以便我们可以准确定位您的DOM元素:

$(document).ready(function(){

    $("[id^=like]").click(function() { 
        var window.id = $(this).attr('id').split['e'][1];
        $.post("parse.php",{like:id}, function(data){
            $("#like"+id).find(".button").html(data);
        }); //END .post
        $(this).hide().attr("Disabled", "True").text("Favorite done!").show();
    }); //END like.click


    $("[id^=unlike]").click(function() { 
        var window.id = $(this).attr('id').split['e'][1];
        $.post("parse.php",{unlike:id}, function(data){
            $("#unlike"+id).find(".button").html(data);
        }); //END .post
        $(this).hide().attr("Disabled", "True").text("Unfavorite done!").show();
    }); //END #unlike.click

});

注意:

  1. 我们使用$("[id^=unlike]")作为选择器 - 这意味着:获取带有开头的ID“的DOM元素”与“

  2. 不同
  3. $(this).attr('id').split['e'][1]表示:
     一个。获取ID属性(“like5”或“different123”)
     湾将其分解为一个数组:lik5 - 或 - unlik123  C。抓住第二个数组元素(数字:5或123)
     d。将其粘贴在名为id

  4. 全局变量中