在yii中使用ajax创建或更新

在yii中使用ajax创建或更新,ajax,drop-down-menu,yii,Ajax,Drop Down Menu,Yii,我目前正在yii框架中创建一个应用程序。该应用程序的目的之一是能够在不同的预定义类别和平台上对游戏进行评级。一个游戏可以属于多个平台 举个例子:我选择给一个叫做“x”的游戏打分。我可以看到游戏发布在4个不同的平台上,所以当我给游戏评分时,我会选择我玩游戏的平台。此后,我对游戏的5个不同类别进行评分。如果我以后再回到这个游戏,我应该能够更新这个等级,但是我也应该能够为不同的平台创建一个新的等级 这是我不确定的最后一部分。我的猜测是如何使用游戏所属的平台创建一个dropdownlist,并使用一些A

我目前正在yii框架中创建一个应用程序。该应用程序的目的之一是能够在不同的预定义类别和平台上对游戏进行评级。一个游戏可以属于多个平台

举个例子:我选择给一个叫做“x”的游戏打分。我可以看到游戏发布在4个不同的平台上,所以当我给游戏评分时,我会选择我玩游戏的平台。此后,我对游戏的5个不同类别进行评分。如果我以后再回到这个游戏,我应该能够更新这个等级,但是我也应该能够为不同的平台创建一个新的等级

这是我不确定的最后一部分。我的猜测是如何使用游戏所属的平台创建一个dropdownlist,并使用一些AJAX功能来决定是创建新的评级还是更新现有的评级。但是,我不知道该怎么做,因为我很少使用AJAX做一些事情

你能给我一些关于如何做到这一点的提示吗

编辑: 可能看起来我还没有尝试过一些东西,所以我将发布一些到目前为止我创建的代码(出于某种原因,我将其命名为排名,而不是评级…)。正如您所见,它没有任何AJAX,也没有考虑平台:

protected function createRanking($model)
    {
        $user_id=Yii::app()->user->getId(); 
        $game_id=$model->id;
        $rank=ranking::model()->find("create_user_id=$user_id and game_id=$game_id"); 

        if($rank===null){
        $ranking=new Ranking;
        }
        else{
        $ranking=$rank;
        }

        if(isset($_POST['Ranking']))
        {
            $ranking->game_id=$model->id;
            $ranking->attributes=$_POST['Ranking'];

            $valid = $ranking->validate();
            if ($valid)
            {
                $ranking->save(false);
                $this->redirect(array('index'));
            }
        }
        return $ranking;
    }

我认为您应该先阅读这些内容(并掌握一些PHP和javascript知识)

如果您想使用下拉列表,您应该查看EventHandler(jQuery可以帮助您)。通过下拉列表的选择器,您可以附加这样的处理程序。我不会再添加任何内容,使用我给您提供的关键字,您应该可以找到关于该主题的优秀文档

在Yii方面,处理AjaxRequest就像处理普通HTTP请求一样。因此,您将有一个操作,其中您有一个检查记录是否存在的控制流(findByPk将是一个选项)

在我看来,你有非常基本的问题,给你代码只会在短期内让事情变得简单。我真的建议您阅读关于yii框架的教程:

编辑: 你的问题在我看来还不是很清楚(这暗示了你对这个话题缺乏阅读)。正如您已经知道的,“isNewRecord”是检查它是更新还是创建的方法。如果存在一些与此相关的问题,则应该考虑包含它的代码并重新修改该问题。

无论如何,以下是一些与代码无关的小建议:

$ranking = ranking::model()->findByAttributes(array(
    "create_user_id" => $user_id,
    "game_id" => $game_id
));

if($ranking===null) {
    $ranking=new Ranking;
}
排名/排名变量声明不清楚,因为您对同一事物使用不同的名称。正如上面的代码所示,它是不需要的。
另外,您基本上在find方法中使用了SQL,这被认为是一种不好的做法,因为Yii的整个思想只是在完全没有办法的情况下使用DB语言。另外,数组的param绑定方式更安全(在本例中,我认为这不是什么大问题)。

我知道这似乎是一个简单的问题(甚至可能是),但我无法弄清楚的是,如何让应用程序根据您在下拉列表中选择的内容决定是否创建或更新新记录。诚然,我仍处于学习阶段,但我在网上找不到答案,我自己也无法找到答案。@Deram stackoverflow帮助那些自助的人。你试过什么?你有数据库结构吗?如果是,您是否正在使用
CActiveRecord
(保存功能为您处理插入/更新:)?您是否尝试过非AJAX版本?它有用吗?如果没有,您对它有什么问题?我在没有AJAX的情况下创建了一些它(但没有使用isNewRecord函数)。我没有太多地研究过这个函数,因为我希望用户能够查看他最后的评分(我不相信isNewRecord能帮你做到这一点,但我可能错了?)