Laravel - JS [ajax] Var 必须是常量
Laravel - JS [ajax] Var must be constant
如果有人知道如何执行此操作以及为什么我会出错,我会很高兴,我想在 forelse 中的 route() 方法中传递 "var size" 它是否可以通过?
它是做什么的?
基于单选框(如果尺寸 M 和 L 可用,将有 2 个单选框),然后如果用户单击添加到卡片,它会获得单选框的值,例如 ( 6 ) = L 他们将其传递给 ajax路线
错误:
Use of undefined constant size - assumed 'size' (View: 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>
您无法在 PHP 中打印 javascript 变量。将 {{ }}
视为 <?php ?>
。如果你只是把它插入那里,它可能看起来像 <?php echo size; ?>
是行不通的,因为显然这里的大小看起来像一个常量,这当然是未定义的(你的错误)。
相反,您需要在 php 中声明变量。但是,由于您是在 运行 时间之后执行此操作,因此无法在呈现页面后分配 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 动态修改它(丑陋,不可移植)
如果有人知道如何执行此操作以及为什么我会出错,我会很高兴,我想在 forelse 中的 route() 方法中传递 "var size" 它是否可以通过?
它是做什么的?
基于单选框(如果尺寸 M 和 L 可用,将有 2 个单选框),然后如果用户单击添加到卡片,它会获得单选框的值,例如 ( 6 ) = L 他们将其传递给 ajax路线
错误:
Use of undefined constant size - assumed 'size' (View: 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>
您无法在 PHP 中打印 javascript 变量。将 {{ }}
视为 <?php ?>
。如果你只是把它插入那里,它可能看起来像 <?php echo size; ?>
是行不通的,因为显然这里的大小看起来像一个常量,这当然是未定义的(你的错误)。
相反,您需要在 php 中声明变量。但是,由于您是在 运行 时间之后执行此操作,因此无法在呈现页面后分配 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});