Javascript 使用ajax的Laravel5.6

Javascript 使用ajax的Laravel5.6,javascript,php,jquery,ajax,laravel,Javascript,Php,Jquery,Ajax,Laravel,我正在尝试使用AJAX从数据库中获取已排序的产品。但是,AJAX不断发送此错误 异常:“ErrorException” ​​ 文件:“C:\xampp\htdocs\WebProject\storage\framework\views\c39cbea2eafe7197b8efb68251988b2c5b3a6834.php” ​​ 线路:5 ​​ 消息:“正在尝试获取非对象的属性‘URL’(视图:C:\xampp\htdocs\WebProject\resources\views\product

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

异常:“ErrorException” ​​ 文件:“C:\xampp\htdocs\WebProject\storage\framework\views\c39cbea2eafe7197b8efb68251988b2c5b3a6834.php” ​​ 线路:5 ​​ 消息:“正在尝试获取非对象的属性‘URL’(视图:C:\xampp\htdocs\WebProject\resources\views\producto\u 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>
和控制器

  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对象没有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>

{{$producto->nombre_prod}
Precio:${{$producto->Precio}
description:{{$producto->descripion}
马尔卡:{{$producto->marca}
塔马诺斯:{{$producto->tamanos}

这里有很多错误:

  • 您的路由ropa/{id}覆盖/ropa/sort,因为它在id=“sort”时匹配,所以您需要将ropa/sort路由置于ropa/{id}路由之前

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

  • 您的
    where('$request->慷慨')
    实际上不使用任何变量,因为您将其包装在字符串中
  • where('$request->慷慨')
    没有可供筛选的列,语法为
    where('慷慨',$request->慷慨)
  • 把这四点放在一起,我可以说:

    将ropa/排序放在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());
    
    }
    

    问题是我不会进入那个网站。这些是我的路线。路由::get('/ropa/{id}','PagesControl@viewItem')->名称('项目');路由::get('/ropa/sort','PagesControl@sort'); 此外,当我加载页面时,没有任何错误,每个对象都正确加载。我已经检查了数据库,以防它在某个地方是一个空计算,但它是完整的。错误是:“试图获取非对象的属性‘URL’”。这意味着
    $producto
    不是一个对象。什么是
    dd($producto)输出?这里是任何产品{#463的dd▼   +“id”:14+“nombre_prod”:“Camisa Roja”+“cantidad”:10+“precio”:250.0+“marca”:“tommy”+“Grando”:“hombre”+“tamanos”;“small”+“Description”:“Camisa para hombre”+“URL”:“public/images/products/Kmqmky8ol9qc8ihql2ovglmnptyvx49or0eyagbl.jpeg”+“创建于”;“2018-04-10 20:48:07”;“更新于2018-04-10:48:07”您能否更改$producto=DB::table('productos')->where('$request->慷慨')->get();替换为DB::table('productos')->where($request->慷慨)->get();线路。删除数据库内控制器中的单个qoute romevequery@NissimBet您是在您的视图中这样做的吗?您能分享您的
    ropa/sort
    路线吗?您确定它指向您共享的功能吗?您的排序功能错误。只有在切换之后,您才需要调用
    get()
    ,以确保查询添加真正起作用。@apokryfos这是两个路由,id是访问单个文件的路由,错误似乎来自于此,排序是我试图使工作路由::get('/ropa/{id}','PagesControl@viewItem')->名称('项目');路由::get('/ropa/sort','PagesControl@sort');如果
    ropa/{id}
    ropa/sort
    之前声明,它将覆盖它。为什么它们不不同呢??无论如何,更改了排序的路由,同样的500内部服务器错误,尽管消息更改为“Sfdump=window.Sfdump | |(函数(doc){var refStyle=doc.createElement('style'),rxEsc=/([.+?^${}()\[\]\/\\\\\]/g,idRx=/\\bsf dump-\\d+-ref[012]\\w+\\b/,[…])”
    /ropa/sort
    匹配
    /ropa/{id}
    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());
    
    }