Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS投票系统-防止多重投票_Javascript_Json_Angularjs_Html_Ionic Framework - Fatal编程技术网

Javascript AngularJS投票系统-防止多重投票

Javascript AngularJS投票系统-防止多重投票,javascript,json,angularjs,html,ionic-framework,Javascript,Json,Angularjs,Html,Ionic Framework,我正在尝试使用AngularJS和Ionic框架创建一个投票系统。我使用ng repeat循环来自JSON数组的一系列用户帖子。每个帖子都有一个向上投票和向下投票按钮。选择一个后,我将禁用该帖子上的按钮。我目前遇到的问题是,无论用户是否重新打开应用程序,都要禁用该按钮。我的目标是防止多重投票。目前,我正在使用此方法在单击按钮后禁用该按钮: <button class="button button-small button-light" ng-click="upThread({{thread

我正在尝试使用AngularJS和Ionic框架创建一个投票系统。我使用ng repeat循环来自JSON数组的一系列用户帖子。每个帖子都有一个向上投票和向下投票按钮。选择一个后,我将禁用该帖子上的按钮。我目前遇到的问题是,无论用户是否重新打开应用程序,都要禁用该按钮。我的目标是防止多重投票。目前,我正在使用此方法在单击按钮后禁用该按钮:

<button class="button button-small button-light" ng-click="upThread({{thread.id}})" ng-disabled="upDisabled[thread.id]">  
  <i class="icon ion-thumbsup"></i>
</button>
<button class="button button-small button-light" ng-click="downThread({{thread.id}})" ng-disabled="downDisabled[thread.id]">
  <i class="icon ion-thumbsdown"></i>
</button>


$scope.upDisabled = {};
$scope.downDisabled = {};

$scope.upThread = function(id) {
    ...
    $scope.upDisabled[id] = true;
    $scope.downDisabled[id] = false;
}

$scope.downThread = function(id) {
    ...
    $scope.downDisabled[id] = true;
    $scope.upDisabled[id] = false;
}`
至于服务器端(带有Laravel框架的PHP):


就目前情况而言。按下按钮时,它会将用户的令牌、线程ID和投票保存到数据库中。加载视图时,基于令牌和threadID的信息将作为JSON数组加载,并与线程数组关联,如果threadID和Thread.id匹配,则将其作为“threadID”:bool(“1”:例如true”)推到up/downdisabled作用域中。

如果您管理大量post,我建议您实现DB

我个人通常将localStorage用于几个首选项,而不是用于存储数据库

因此,如果您只针对ios/android,我建议您


如果你瞄准Windows Phone 8.1,实现不是微不足道的,我面临着一些关于WINDOWSPHONN和C++编译库的结构(这里有更多的细节)

的问题,你需要存储用户所做的投票。这可以在cookie、本地存储或服务器上的数据库中完成。需要存储在数据库中-您不能依赖cookie/localstorage@keif:我的评论是在关于代币的部分发布之前;没有它,新的IP就像一个清晰的本地存储一样容易获得…@keif:没错。我目前正在使用一个远程数据库。Localstorage也不能持久。@dandavis:我选择不使用IPs,因为这是一个混合移动应用程序。我选择使用UUID作为标识符/令牌。
$scope.upDisabled = {};
$scope.downDisabled = {};
$scope.upCheck = {};
$scope.downCheck = {};

...Votes Loading function up here
...Thread loading Function up here
.finally(function(){
angular.forEach($scope.threads,function(value,index){
    angular.forEach($scope.upCheck,function(value2,index){
        if(value.id == value2.threadID)
        {
            $scope.upDisabled[value.id] = true;
            $scope.downDisabled[value.id] = false;
        }
    })
})

angular.forEach($scope.threads,function(value,index){
    angular.forEach($scope.downCheck,function(value2,index){
        if(value.id == value2.threadID)
        {
            $scope.downDisabled[value.id] = true;
            $scope.upDisabled[value.id] = false;
        }
    })
})
}
$scope.loadVotes();
$scope.loadThreads();
public function upvoteThread($id, $token)
{
    $thread = Thread::find($id);
    $score = $thread->score;
    $score = $score + 1;
    $thread->score = $score;
    $thread->save();

    $voted = ThreadVote::where('threadID','=',$id)->where('token','=',$token)->get();

    if($voted->isEmpty())
    {
        $upVote = new ThreadVote;
        $upVote->threadID = $id;
        $upVote->token = $token;
        $upVote->upVote = 'true';
        $upVote->downVote = 'false';
        $upVote->save();
    } 
    else 
    {
        DB::table('thread_votes')
            ->where('threadID', '=', $id)
            ->where('token','=',$token)
            ->update(array('upVote' => 'true', 'downVote' => 'false')
        );
    }

    return Response::json(array('status'=>1))->setCallback(Input::get('callback'));
}

public function getUpVotes($token)
{
    $votes = ThreadVote::where('token','=',$token)
    ->where('upVote','=','true')
    ->select('threadID','upVote')
    ->get();

    return Response::json($votes)->setCallback(Input::get('callback'));
}

...Similar downVote Function...