Ajax发布返回值

时间:2010-09-04 01:30:47

标签: php ajax

我使用Ajax将值发送到PHP脚本,该脚本将一些值写入数据库:

$.ajax({
    type: "POST",
    data: "action=vote_down&id="+$(this).attr("id"),
    url: "vote.php",
    success: function(msg) {
        $("span#votes_count"+the_id).fadeOut();
        $("span#votes_count"+the_id).html(msg);
        $("span#votes_count"+the_id).fadeIn();                      
    }
});

正如您可以从action=vote_down中看出脚本是用于投票脚本。

我已经阻止用户多次投票,因为在vote.php中记录了对用户名和ID的投票,如果在同一帖子的数据库中已存在用户名和ID,那么我就不会将投票添加到DB。

我个人认为在每个页面加载时查询数据库以检查用户是否已经投票可能非常密集,有很多地方可以在一个页面上投票。

所以相反我会向用户显示投票选项,但是当他们投票时,我想知道如何从vote.php返回一个值来表示他们已经投票。

有关最佳方法的任何想法吗?

2 个答案:

答案 0 :(得分:2)

使用JSON

如果这是您显示投票表格的文件:

<div id='voteform-div'>
 <form id='voteform'>
   Your form elements and a submit button here.
 </form>
</div>

您的JS代码如下所示:

jQuery('#voteform').live('submit',function(event) {
    $.ajax({
        url: 'vote.php',
        type: 'POST',
        data: "action=vote_down&id="+$(this).attr("id"),
        dataType: 'json',
        success: function( messages) {
            for(var id in messages) {
                jQuery('#' + id).html(messages[id]);
            }
        }
    });
    return false;
});

你的 vote.php 应该是这样的:

// Get data from $_POST array.

if( Already voted ) {

  // It will replace the id='voteform-div' DIV with error message
  $arr = array ( "voteform-div" => "you have already voted." ); 

} else {

 // Store vote in database

  // It will replace the id='voteform-div' DIV with confirmation message
  $arr = array ( "voteform-div" => "Yor vote is submitted. Thanks" );

}

echo json_encode( $arr ); // encode array to json format



有关详细信息,请查看this question

答案 1 :(得分:1)

这应该让你朝着正确的方向......

http://forum.jquery.com/topic/jquery-ajax-and-php-variables

如果已经发布,我会解析一个布尔值false,如果成功,我会解析一个布尔值(用于样式化/添加html消息)。