0

我正在尝试为我们的 Web 应用程序实现一个赞成/反对票系统。目前,用户可以在我们的网站上“发布”问题。当用户进入我们网站的浏览部分时,他们会看到当前在网站上提出的所有问题的列表。

当用户单击 up 或 downvote 链接时,应通过 AJAX 更新数据库(即我不想重定向用户,或刷新页面)。

如何检索与每个 up/downvote 链接相关的问题,然后将该数据发送到控制器?

site/browse:

<?php
    /*
     * @var $model Question
     */

    //loop through all the given questions
    foreach($model as $q)
    {        
        //add the upvote and downvote (text for now)
        echo CHtml::ajaxLink('up', array('question/upvote'));
        echo ("&nbsp - &nbsp;");
        echo CHtml::ajaxLink('down', array('question/downvote'));
        echo '<br />';

        echo CHtml::link($q['name'], array('question/browse/'.$q['_id']));
        echo "<br />Description: " . $q["description"] . "<br />";
        echo "Owner: " . $q["user_id"] . "<br />";

        $timeStamp = new Timestamp($q['timestamp']);

        echo $timeStamp->getDifferenceString() . "<br /><br />";
     }
?>

question controller:

...
 public function upvote()
        {
            //should retrieve question_id and then update database accordingly
            //e.g. UPDATE Question SET value = value + 1 WHERE Question.id = id
        }
...
4

1 回答 1

1

您可以在 ajax 请求的 URL 中传递获得赞成票的问题的 id,或者作为 ajax 请求中的 POST 数据。我建议通过 jQuery AJAX 调用使用 POST 数据,但在这里我将展示如何使用您提供的代码来执行此操作。

<?php
    /*
     * @var $model Question
     */

    //loop through all the given questions
    foreach($model as $q)
    {        
        //add the upvote and downvote (text for now)
        echo CHtml::ajaxLink('up', array('question/upvote',array('id'=>$q['_id'])));
        echo ("&nbsp - &nbsp;");
        echo CHtml::ajaxLink('down', array('question/downvote',array('id'=>$q['_id'])));
        echo '<br />';

        echo CHtml::link($q['name'], array('question/browse/'.$q['_id']));
        echo "<br />Description: " . $q["description"] . "<br />";
        echo "Owner: " . $q["user_id"] . "<br />";

        $timeStamp = new Timestamp($q['timestamp']);

        echo $timeStamp->getDifferenceString() . "<br /><br />";
     }
?>

获得 ID 后,您将在问题控制器中修改 upvote() 方法,如图所示。

问题控制器:

...
 public function upvote($id)
        {
            //you have the question id, now you can update database accordingly
            //e.g. UPDATE Question SET value = value + 1 WHERE Question.id = id
        }
...

这会让你开始。您应该考虑使用 jQuery 生成赞成/反对票请求并处理响应 - 我并不是指 ajaxLink() 方法自动生成的 jQuery。您还可以通过处理赞成和反对请求的路线来查看使 url 看起来更好的方法。

于 2013-09-02T00:53:22.040 回答