繁体   English   中英

Laravel 5.6使用Ajax

[英]Laravel 5.6 using ajax

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

异常:“ ErrorException”文件:“ 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,但是由于我试图对从数据库发送来的产品网格进行排序,因此我无法做到这一点。

由于您的$ producto对象没有网址,因此此问题已经到来,因此请先检查$ 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>

这里有很多错误:

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

  2. 您正在调用->get()来执行查询,随后您将添加查询约束。 由于查询已执行,因此无法使用。

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

综合所有这四个我可以说:

将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());

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM