将AJAX数据发送到控制器(Yii-Framework)

时间:2013-09-01 23:48:13

标签: jquery yii

我正在尝试为我们的Web应用程序实现up / downvote系统。目前,用户可以在我们的网站上“发布”一个问题。当用户访问我们网站的浏览部分时,会显示当前在网站上提出的所有问题的列表。

当用户点击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
        }
...

1 个答案:

答案 0 :(得分:1)

您可以在ajax请求的URL中传递获取upvote的问题的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来生成upvote / downvote请求并处理响应 - 我并不是指ajaxLink()方法自动生成的jQuery。您还可以查看使用路线处理upvote和downvote请求的网址看起来更好。