【问题标题】:How to pass data to the database with javascript and laravel如何使用 javascript 和 laravel 将数据传递到数据库
【发布时间】: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


【解决方案1】:

我认为你还没有完成大括号函数检查我的代码

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, 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
console.log($('#addfavourites' + productid));
        $('#addfavourites' + productid).hide();
        // show delete button
        $('#deletefavourite' + productid).show();
    },
    error: function (XMLHttpRequest) {
        // handle error
    }
});
}

【讨论】:

    【解决方案2】:

    首先您必须在网络中查看检查元素的请求和响应 这东西会让你能跟上问题。你的路线可能有问题,所以请 在发布请求期间检查网络。

    【讨论】:

      【解决方案3】:

      首先我建议改变路线。我的意思是,对两个动作使用相同的模式:喜欢和不喜欢

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

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

      其次,您必须在刀片模板中渲染两个 div

         <div class="CLASS_SHOW_ITEM" id="deletefavourite{{$product- >id}}"onClick="deleteFromFavourites({{$product->id}}, {{ Auth::user()->id }})"> unlike </div>
         <div class="CLASS_HIDE_ITEM" id="addfavourites{{$product->id}}" onClick="addToFavourites({{$product->id}}, {{ Auth::user()->id }})" > like </div>
      

      您必须按属性值选择类 $product->isLiked

      【讨论】:

      • 我在控制台上看到这个错误1(index):508 Uncaught ReferenceError: addToFavourites is not defined at HTMLAnchorElement.onclick@Eugene
      猜你喜欢
      • 2010-10-17
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 2021-05-01
      • 2022-09-24
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      相关资源
      最近更新 更多