2017-12-26 23 views
0

like/dislike at same time同様/嫌い機能

私はコメントを好きと嫌いのこのAjaxの機能を持っていますが、この関数で、私が好きなことができ、同時に嫌い。例えば私がコメントを気に入っているのはそれが好きで、それが嫌いならそれも私のようなものを取り除かずにやってしまう。

ここ等のためのコード(upvote)で、(downvoteを)嫌い

アップ票

$(".tup").click(function (e) { 

    e.preventDefault(); 
    var reviewId = $(this).data('id'); 

    $.ajax({ 
      headers: { 
       'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
      }, 
      url: document.location.origin + '/review/' + reviewId + '/upvote', 
      type: 'POST', 
      data: { 
       review_id: reviewId 
      }, 
      dataType: 'json' 
     }) 
     .done(function (data) { 

      if (data == true) { 
       $('.tup[data-id=' + reviewId + '] .vn').text(function (i, oldVal) 
       { 
        return parseInt(oldVal, 10) + 1; 
       }); 
      } else { 
       snackybar.timer("Already Voted", 3000); 
      } 

     }) 
     .fail(function (jqXHR, textStatus) { 
      console.log("Request failed: " + textStatus); 
     }); 
}); 

// down votes 

$(".tdown").click(function (e) { 
    e.preventDefault(); 
    var reviewId = $(this).data('id'); 

    $.ajax({ 
      headers: { 
       'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
      }, 
      url: document.location.origin + '/review/' + reviewId + '/downvote', 
      type: 'POST', 
      data: { 
       review_id: reviewId 
      }, 
      dataType: 'json' 
     }) 
     .done(function (data) { 
      if (data == true) { 
       $('.tdown[data-id=' + reviewId + '] .vn').text(function (i, oldVal) { 
        return parseInt(oldVal, 10) + 1; 
       }); 
      } else { 
       snackybar.timer("Already Voted", 3000); 
      } 
     }) 
     .fail(function (jqXHR, textStatus) { 
      console.log("Request failed: " + textStatus); 
     }); 
}); 

そして、これは問題があることで、コントローラのコード

public function upvote($id) { 
    if(!UpDownVote::where('review_id',$id)->where('upvote',1)->first()) { 
     Review::findOrFail($id)->increment('upvote'); 
     UpDownVote::create([ 
      'user_id' => Auth::user()->id, 
      'review_id' => $id, 
      'upvote' => 1 
     ]); 
     return 'true'; 
    } else { 
     return 'false'; 
    } 
} 

public function downvote($id) { 
    if(!UpDownVote::where('review_id',$id)->where('downvote',1)->first()) { 
     Review::findOrFail($id)->increment('downvote'); 
     UpDownVote::create([ 
      'user_id' => Auth::user()->id, 
      'review_id' => $id, 
      'downvote' => 1 
     ]); 
     return 'true'; 
    } else { 
     return 'false'; 
    } 
} 
+0

あなたが直面しているエラーは何ですか? –

+0

コメントを好きなときにそれをやっていて、それを嫌うなら(それを押さえて)それもやっているよ。 これは同時にコメントが好きで嫌いだということを意味する。 –

+0

あなたのHTMLコードも投稿してください –

答えて

0

ですあなたのAjax呼び出しは非同期です。したがって、tupボタンをクリックしてからtdownをクリックすると、2番目のボタンをクリックしたときに治療が完了していません。

サーバーの応答を待っているときに、クリックする可能性を無効にすることができます。

var isClicking = false; 
$(".tup").click(function (e) { 
if(isClicking){ 
    return; 
} 
isClicking = true; 
e.preventDefault(); 
var reviewId = $(this).data('id'); 

$.ajax({ 
     headers: { 
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
     }, 
     url: document.location.origin + '/review/' + reviewId + '/upvote', 
     type: 'POST', 
     data: { 
      review_id: reviewId 
     }, 
     dataType: 'json' 
    }) 
    .done(function (data) { 

     if (data == true) { 
      $('.tup[data-id=' + reviewId + '] .vn').text(function (i, oldVal) 
      { 
       return parseInt(oldVal, 10) + 1; 
      }); 
     } else { 
      snackybar.timer("Already Voted", 3000); 
     } 

    }) 
    .fail(function (jqXHR, textStatus) { 
     console.log("Request failed: " + textStatus); 
    }).always(function(){ 
    isClicking=false; 
    }); 
}); 

// down votes 




$(".tdown").click(function (e) { 
e.preventDefault(); 
if(isClicking){ 
    return; 
} 
isClicking = true; 
var reviewId = $(this).data('id'); 

$.ajax({ 
     headers: { 
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
     }, 
     url: document.location.origin + '/review/' + reviewId + '/downvote', 
     type: 'POST', 
     data: { 
      review_id: reviewId 
     }, 
     dataType: 'json' 
    }) 
    .done(function (data) { 
     if (data == true) { 
      $('.tdown[data-id=' + reviewId + '] .vn').text(function (i, oldVal) { 
       return parseInt(oldVal, 10) + 1; 
      }); 
     } else { 
      snackybar.timer("Already Voted", 3000); 
     } 
    }) 
    .fail(function (jqXHR, textStatus) { 
     console.log("Request failed: " + textStatus); 
    }).always(function(){ 
    isClicking=false; 
    }); 
}); 
+0

男性なし まだ同じ問題 –

関連する問題