我正在创建此功能,用户可以在其中喜欢某个产品,而与javascript不同,如果用户喜欢该产品,则应将其添加到数据库中;如果他喜欢该产品,则应将其从数据库中删除。一切都以正常方式正常运行,但是如果我使用JavaScript,则like按钮无法正常工作,或者在数据库中未添加任何内容,同样的事情适用于不同于按钮。我该如何进行这项工作(喜欢和不喜欢,这在数据库中也应该起作用,而不更改喜欢和不喜欢的图标)?
JavaScript
// Like product
function addToFavourites(productid,userid) {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
method: 'post',url: `/product/like/${productid}`,data: {
'user_id': userid,'product_id': productid,},success: function () {
// hide add button
$('#addfavourites' + productid).hide();
// show delete button
$('#deletefavourite' + productid).show();
},error: function (XMLHttpRequest) {
// handle error
}
});
// Unlike product
function deleteFromFavourites(productid,url: `product/${productid}/unlike`,error: function (XMLHttpRequest) {
// handle error
}
});
路线
Route::post('product/like/{id}',['as' => 'product.like','uses' => 'LikeController@likeProduct']);
Route::post('product/{product}/unlike','LikeController@destroy')->name('product.unlike');
刀片文件
@if($product->isLiked)
<div id="deletefavourite{{$product->id}}"onClick="deleteFromFavourites({{$product->id}},{{ Auth::user()->id }})"> unlike </div>
@else
<div id="addfavourites{{$product->id}}" onClick="addToFavourites({{$product->id}},{{ Auth::user()->id }})" > like </div>
@endif
我如何添加到收藏夹
public function likeProduct($id)
{
if(Auth::check()){
$this->handleLike(Product::class,$id);
return redirect()->back();
}
else{
return redirect()->route('login')
}
}
public function handleLike($type,$id)
{
$existing_like = Like::withTrashed()->whereLikeableType($type)->whereLikeableId($id)->whereUserId(Auth::id())->first();
if (is_null($existing_like)) {
Like::create([
'user_id' => Auth::id(),'likeable_id' => $id,'product_id' => $id,'likeable_type' => $type,]);
} else {
if (is_null($existing_like->deleted_at)) {
$existing_like->delete();
} else {
$existing_like->restore();
}
}
}