如何使用javascript和laravel将数据传递到数据库

我正在创建此功能,用户可以在其中喜欢某个产品,而与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();
        }
    }
}
shenlong1943 回答:如何使用javascript和laravel将数据传递到数据库

我认为您尚未完成功能花括号检查我的代码

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
console.log($('#addfavourites' + productid));
        $('#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
    }
});
}
,

首先,您必须签入网络以查看来自inspect元素的请求和响应 这个东西会让你可以跟随问题。您可能对路线有疑问,所以请 在发布请求期间检查网络。

,

首先,我建议更改路线。我的意思是,两种操作都使用相同的模式:喜欢和不同

if (focusedElRef === input1Ref)

然后检查在服务器上看到的内容,记录传入的数据。应该有助于理解为什么您的算法无效。

第二,您必须在刀片模板中同时渲染两个div

Route::post('product/like/{id}',['as' => 'product.like','uses' => 'LikeController@likeProduct']);
Route::post('product/unlike/{id}','LikeController@destroy')->name('product.unlike');

您必须通过属性 $ product-> isLiked

的值选择类
本文链接:https://www.f2er.com/3166963.html

大家都在问