我正在尝试使用AJAX从数据库中获取已排序的产品。但是AJAX不断发送此错误。
exception:" ErrorException" 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>
AJAX代码
$('.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,但是由于我正在尝试对从DB发送的产品网格进行排序,我不能这样做。
答案 0 :(得分:0)
此问题已经到位,因为您的 $ producto 对象没有Url,因此请先检查 $ producto-&gt;网址,然后按以下方式传递该网址。
<?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>
答案 1 :(得分:0)
这里有很多错误:
您的路由ropa / {id}覆盖/ ropa / sort,因为它在id =“sort”时匹配,因此您需要将ropa / sort路由放在ropa / {id}路由之前。
您正在调用执行查询的->get()
,然后您将添加查询约束。由于查询已经执行,因此无效。
where('$request->genero')
实际上并没有使用任何变量,因为您已将其包装在字符串中。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());
}