Laravel 5.6 using ajax



我正在尝试使用 AJAX 从数据库中获取排序的产品。但是,AJAX 不断发送此错误。

异常

:"错误异常" ​​ file: "C:\xampp\htdocs\WebProject\storage\framework\views\c39cbea2eafe7197b8efb68251988b2c5b3a6834.php" ​​ 行: 5 ​​ 消息:"尝试获取非对象的属性'URL'(视图:C:\xampp\htdocs\WebProject\resources\views\producto_indiv.blade.php)">

问题是视图producto_indiv与 ajax 的 javascript 代码没有联系。错误来源的视图在访问时不显示任何错误。

这是错误应该来自producto_indiv,但是此视图与具有ajax代码的视图无关

<div class="contenedor" id="Producto_Indiv_Page">
<div class="item-cont">
<?php $url = "/storage/images/products/" . basename($producto->URL); ?>
<img src="{{$url}}">
<div class="line"></div>
<div class="traits">
<div><span class="name">{{$producto->nombre_prod}}</span></div>
<span>Precio: ${{$producto->precio}}</span>
<span>Descripcion: {{$producto->descripcion}}</span>
<span>marca: {{$producto->marca}}</span>
<span>tamanos: {{$producto->tamanos}}</span>
</div>
</div>
</div>

阿贾克斯代码

$('.sort_opt').click(function(e) {
e.preventDefault();
jQuery.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
jQuery.ajax({
dataType: 'json',
type: 'GET',
url: '/ropa/sort',
data: {
type: this.name,
genero: this.gender,
},
success: function(result) {
console.log("DONE");
},
error: function(result) {
console.log(result);
}
});
});

和控制器

public function sort(Request $request) {
$producto = DB::table('productos')->where('$request->genero')->get();
switch($request->type) {
case 'nombre':
$producto->orderBy('nombre_prod', 'asc');
break;
case 'marca':
$producto->orderBy('marca', 'asc');
break;
case 'precio_desc':
$producto->orderBy('precio', 'desc');
break;
case 'precio_desc':
$producto->orderBy('precio', 'desc');
break;
case 'new':
$producto->latest();
break;
case 'old':
$producto->oldest();
break;
}
return Response::json($producto);
}

我之前一直坚持这个问题,但改为使用重定向而不是 ajax,但是在这种情况下我无法做到这一点,因为我正在尝试对从数据库发送的产品网格进行排序。

这里有很多错误:

您的路由 ropa/
  1. {id} 会覆盖/ropa/sort,因为它在 id="sort" 时匹配,因此您需要将 ropa/sort 路由放在 ropa/{id} 路由之前。

  2. 您正在调用执行查询的->get(),随后您将添加查询约束。这将不起作用,因为查询已经执行。

  3. where('$request->genero')它实际上没有使用任何变量,因为您已经将其包装在字符串中。
  4. where('$request->genero')没有要筛选的列,语法将where('genero', $request->genero)

把这4个放在一起,我可以说:

将 ropa/sort 放在 ropa/{id} 路由之前。

sort()代码更改为:

public function sort(Request $request) {
$producto = DB::table('productos')->where('genero', $request->genero);
switch($request->type) {
case 'nombre':
$producto->orderBy('nombre_prod', 'asc');
break;
case 'marca':
$producto->orderBy('marca', 'asc');
break;
case 'precio_desc':
$producto->orderBy('precio', 'desc');
break;
case 'precio_desc':
$producto->orderBy('precio', 'desc');
break;
case 'new':
$producto->latest();
break;
case 'old':
$producto->oldest();
break;
}
return Response::json($producto->get());
}

这个问题已经到来,因为你的$producto对象没有 URL,所以请先检查$producto->URL,然后按如下方式传递 URL。

<?php 
$productURl = "";
if(isset($producto->URL)) {
$productURl = $producto->URL;
}
?>
<div class="contenedor" id="Producto_Indiv_Page">
<div class="item-cont">
<?php $url = "/storage/images/products/" . basename($productURl); ?>
<img src="{{$url}}">
<div class="line"></div>
<div class="traits">
<div><span class="name">{{$producto->nombre_prod}}</span></div>
<span>Precio: ${{$producto->precio}}</span>
<span>Descripcion: {{$producto->descripcion}}</span>
<span>marca: {{$producto->marca}}</span>
<span>tamanos: {{$producto->tamanos}}</span>
</div>
</div>
</div>