You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Ajax请求无法从ProductController获取数据,返回结果始终为null

解决Ajax请求产品数据返回null的问题

结合你给出的路由和控制器代码,我整理了几个最常见的排查方向,你可以一步步来定位问题:

1. 先确认前端是否正确发送了category_id参数

这是最容易踩坑的点——如果前端没把参数传对,后端拿到的$category_id是空值,自然查不到数据返回null。

  • 快速检查方法:在控制器里临时打印请求参数,看看有没有拿到category_id:
    public function listele(Request $request) {
        // 打印所有请求参数,直接看结果
        dd($request->all());
        $category_id = $request['category_id'];
        $urunler = Product::where('category_id', $category_id)->get();
        return json_encode([ 'urunler' => $urunler ], JSON_UNESCAPED_UNICODE);
    }
    
    如果打印结果里没有category_id,那就要去补全/检查你的Ajax代码:
    • 必须用POST方法(和路由定义一致)
    • 一定要带上Laravel POST请求必需的_token参数,否则会被CSRF保护拦截
      给你一个标准的jQuery Ajax示例参考:
    $.ajax({
        url: '/urun-listele',
        method: 'POST',
        data: {
            category_id: 你的分类ID变量,
            _token: '{{ csrf_token() }}' // blade模板里直接用这个,静态页面的话要手动获取令牌
        },
        success: function(res) {
            console.log(res);
        }
    });
    

2. 确认数据库里真的有对应category_id的产品

即使参数传对了,也要确保数据库里存在匹配的记录。

  • 检查方式:在控制器里先打印拿到的$category_id,再打印查询结果:
    public function listele(Request $request) {
        $category_id = $request['category_id'];
        // 先确认拿到的ID是对的
        dd($category_id);
        // 再看查询结果
        $urunler = Product::where('category_id', $category_id)->get();
        dd($urunler);
        return json_encode([ 'urunler' => $urunler ], JSON_UNESCAPED_UNICODE);
    }
    
    如果$category_id是正确的,但$urunler是空集合,那就是数据库里没有对应数据,需要检查数据插入是否正确。

3. 换成Laravel官方的JSON返回方式,避免编码问题

你现在用json_encode手动处理返回,其实Laravel内置的response()->json()更可靠,能自动处理模型集合的序列化,还会设置正确的响应头:

public function listele(Request $request) {
    $category_id = $request->input('category_id'); // 用input()方法获取参数更规范
    $urunler = Product::where('category_id', $category_id)->get();
    return response()->json([
        'urunler' => $urunler
    ], 200, [], JSON_UNESCAPED_UNICODE);
}

这个方法能减少很多手动编码带来的潜在问题。

4. 检查路由是否被覆盖

有时候如果有同名的路由定义在后面,会覆盖前面的路由,导致请求走到错误的方法。

  • 可以在终端执行php artisan route:list,查看POST /urun-listele是否确实指向ProductController@listele。

先从这几个点排查,应该很快能找到问题!

内容的提问来源于stack exchange,提问作者Ali Özen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:00:14