【问题标题】:LaravelShoppingCart and PNotifyLaravelShoppingCart 和 PNotify
【发布时间】:2015-10-27 12:52:05
【问题描述】:

我正在尝试将LaravelShoppingCartPNotify 一起使用,但我有点迷茫,可以使用一些指针。

这是我目前的界面:

当我点击黄色的“添加我”按钮时,我会使用右上角的 PNotify 生成一个新通知,就像您在图片中看到的那样。

接下来我想做的是:

  1. 当我点击“添加我”按钮时,Cart::add() 将被调用,我的班级将被添加到购物车会话中

  2. 黄色按钮变成“删除我”,可以拨打Cart::remove()

  3. 通知仍然存在于右上角(即使您转到另一个页面。它本质上是在引用Cart::content()),当您单击通知上的“x”按钮时,它会调用Cart::remove()也是。

我并不是真的在寻找代码(尽管如果它有助于解释,请随意)。我只是希望有人向我解释我是如何做到这一点的。

看来我需要使用 AJAX。如果是这样,我需要向我的 Laravel 项目添加什么才能使用 AJAX 添加到购物车?

【问题讨论】:

    标签: laravel shopping-cart pnotify


    【解决方案1】:

    不一定需要ajax。每次单击“添加我”按钮时,您只需发送一个帖子请求并使用 Cart::add() 将课程添加到您的购物车。 您可以通过列出 Cart::content() 来显示添加的类。此外,如果已添加类,请检查您的视图,然后更改按钮以删除类。

    如果你更喜欢 ajax。然后您只需使用与提及相同的过程向您的服务器发送一个 ajax 调用。您不必将包添加到项目中即可使用 ajax。你只需要 jquery 插件。

    我更喜欢 ajax,因为您不必加载页面,但它需要大量工作。

    更新

    你需要这样的东西。

    $('#button').click(function(){
    
    $.ajax({
      type: 'post',
      url: 'url',
      data: {your: data},
      dataType: 'json'
    }).done(function(data){
     //do something with your data
    });
    
    return false;
    
    });
    

    注意

    在您的 ajax 函数中。如果您提交表单,它应该看起来像这样。

     $.ajax({
        type: "post",
        url: "{!! route('route') !!}",
        data: $('#form').serialize(),
        dataType: 'html'
     }).done(function (data) {
    

    但如果您只是传递选定的数据,则需要传递 _token。

    $.ajax({
        type: "post",
        url: "{!! route('route') !!}",
        data: {data: value, _token: "{{ csrf_token() }}"},
        dataType: 'html'
     }).done(function (data) {
    

    更新

    这是我的后端示例代码。

    public function addItem(Request $request)
        {
            $data = $request->all();
    
            $validator = Validator::make($data, [
                'field' => 'required'
            ]);
    
            if ($validator->fails())
            {
                $data = Cart::content();
                return view('errorview', compact('data'))->withErrors($validator);
            }
    
            Cart::add($data['id'], $data['name'], $data['qty'],
                $data['amount']);
    
            $data = Cart::content();
    
            return view('myview', compact('data'));
        }
    

    更新

    您需要在所有按钮中添加一个类。像这样的东西。

     $('.btn').click(function () {
                    $.ajax({
                        type: 'post',
                        url: "{!! route('route') !!}",
                        data: {id: $(this).prop('id').substr(9), _token: "{{ csrf_token() }}"},
                        dataType: "html"
                    }).done(function (data) {
                       //more code here
                    });
                    return false;
                });
    

    【讨论】:

    • 我在发布到另一个接收输入的路由吗?这主要是我感到困惑的部分。我很少使用 AJAX,所以我对何时应该使用它感到困惑。
    • 是的,您需要创建另一个路由来接收输入。
    • 天哪,我才意识到我可以发布它。虽然这会触发页面刷新。你给我的例子,会触发刷新吗?另外,我需要在后端进行哪些类型的更改才能接受 AJAX 请求?
    • 哦。我忘了。您需要在结束标记之前添加 return false。
    • 可以使用您的常规发布路线。您无需添加任何内容。
    猜你喜欢
    • 2015-05-05
    • 2015-04-16
    • 2017-03-02
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 2016-06-09
    • 2014-10-09
    相关资源
    最近更新 更多