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