【发布时间】:2019-11-04 11:55:28
【问题描述】:
我正在创建这个功能,用户可以喜欢一个产品,而不是使用 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, userid) {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
method: 'post',
url: `product/${productid}/unlike`,
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
}
});
路线
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();
}
}
}
【问题讨论】:
-
请检查ajax调用与否?
-
什么意思? @Jinesh
-
当你点击like按钮时它会调用ajax吗?
-
当我点击时我在控制台上看到这个错误
1(index):508 Uncaught ReferenceError: addToFavourites is not defined at HTMLAnchorElement.onclick@Jinesh -
你能告诉我你在哪里写addToFavourites这个函数吗?如果可能,分享您的视图文件
标签: javascript php laravel laravel-5