【问题标题】:Laravel - JS [ajax] Var must be constantLaravel - JS [ajax] Var 必须是常量
【发布时间】:2018-05-19 14:15:58
【问题描述】:

如果有人知道如何做到这一点以及为什么我会出错,我会很高兴,我想在 forelse 内部的 route() 方法中传递“var size”,这是否可以通过?

它是做什么的?

基于单选框(如果尺寸 M 和 L 可用,将有 2 个单选框),然后如果用户单击添加到卡,它会获取单选框的值,例如 (6) = L 他们将其传递给 ajax 路由

错误:

使用未定义的常量大小 - 假定为“大小”(查看:C:\xampp\htdocs\EcSc\resources\views\shop\home.blade.php)

JS:

        <script>
            var CartCount = {{ Session::has("cart") ? Session::get("cart")->totalQty : "0" }} ;
            var size;
            @forelse($products as $productsjs)
            $("#product-{{$productsjs->id}}").click(function () {
                var radios{{$productsjs->id}} = document.getElementsByName('radio-{{$productsjs->id}}');
                for (var i = 0, length = radios{{$productsjs->id}}.length; i < length; i++) {
                    if (radios{{$productsjs->id}}[i].checked) {
                        // do whatever you want with the checked radio
                        size = radios{{$productsjs->id}}[i].value;

                        // only one radio can be logically checked, don't check the rest
                        break;
                    }
                }
                $.ajax({
                    type: "get",
                    url: "{{route("product.addToCartAjax", $productsjs->id, size)}}", // insert product with specific size into session
                    success: function () {
                        CartCount++;
                        $("#shoppingCartCounter").html(CartCount);
                        console.log("Produkt bol pridani");
                        console.log("Velkost produktu je : " + size); // size contain value of checked radio box 
                    }
                })
            });
            @empty
            @endforelse
        </script>

【问题讨论】:

    标签: javascript ajax laravel blade


    【解决方案1】:

    您不能在 PHP 中打印 javascript 变量。将{{ }} 视为&lt;?php ?&gt;。如果您只是将其插入其中,它可能看起来像 &lt;?php echo size; ?&gt; 这不起作用,因为显然 size 在这里看起来像一个常量,这当然是未定义的(您的错误)。

    相反,您需要在 php.ini 中声明该变量。但是,由于您是在运行时之后执行此操作,因此您无法在页面呈现后分配 PHP 变量。那么你的替代方案是什么?

    1 - 手动构建路线:(推荐,最简单)

    url: '/products/' + {{$productsjs->id}} + '/add-to-cart-ajax/' + size
    

    2 - 为 Laravel 使用客户端路由生成器,例如 La Route(更难,但更具动态性和可重用性)

    laroute.route('product.{id}.addToCartAjax.{size}', {id: '{{$productsjs->id}}', size: size});
    

    3 - 其他通用解决方案,例如提前生成路由并使用 javascript 动态修改它(丑陋,不可移植)

    【讨论】:

    • aaa 我看到我的 JS 变量在 {{ }} 内:o 会尝试删除它:) 我在这里发布结果
    猜你喜欢
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 2013-01-03
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    相关资源
    最近更新 更多