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

Laravel中json_decode返回null问题排查求助

问题分析与解决方案

你遇到的json_decode返回null的问题,核心原因是前端AJAX请求没有正确发送JSON格式的数据,后端自然无法解析出有效内容。下面分点说明问题所在和修复方案:

1. 前端AJAX的两个关键错误

你的前端代码里有两处导致JSON发送失败的问题:

  • Content-Type设置错误:contentType: 'json'不是标准的MIME类型,正确的JSON请求头应该是application/json
  • 数据未序列化为JSON字符串:jQuery的$.ajax默认会把data对象编码为application/x-www-form-urlencoded格式(也就是表单提交格式),即使你设置了错误的Content-Type,实际发送的也不是JSON文本

修正后的前端代码

<button id="btn">click me</button>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$('#btn').click(function () {
    $.ajax({
        url: "/execute",
        type: "POST",
        contentType: 'application/json', // 使用标准JSON MIME类型
        data: JSON.stringify({ "test": "hello" }), // 将JS对象转为JSON字符串
        success: function (data) {
            console.log(data.status);
        }
    });
});
</script>

2. 后端判断请求类型的优化

你手动读取请求头的方式不够严谨(比如如果请求头里没有content-type会直接报错),Laravel已经提供了便捷方法$request->isJson()来判断是否为JSON请求,用这个方法更可靠。

修正后的后端控制器代码

public function executeFunction(Request $request){
    if($request->isJson()) { // 用Laravel内置方法判断JSON请求
        $requestData = json_decode($request->getContent(), true);
        Log::info($requestData); // 现在可以正确获取到{"test": "hello"}了
    }
    return response()->json(["status"=>"success"]);
}

额外说明

如果你只是想获取test字段的值,其实在前端不修改的情况下(默认发表单格式),可以直接用$request->input('test')拿到数据,但既然你的需求是发送JSON,还是推荐按照上面的方式修正前端代码,保证请求格式符合预期。

内容的提问来源于stack exchange,提问作者Khaled Rimawi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:18:49