首页 > 解决方案 > json_decode 返回 null - laravel

问题描述

我正在使用 ajax 调用从前端发送 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: 'json',
        data:{
            "test":"hello"
        },
        success:function (data) {
            console.log(data.status);
        }
    });


});
</script>

我想在 laravel 中解码这个 json 对象,这是我的控制器代码:

public function executeFunction(Request $request){

          if($request->header()['content-type'][0] === 'json')
          {

              Log::info(json_decode($request->getContent(),true));

          }
          return response()->json(["status"=>"success"]);

}

json_decode 在这里返回 null,可能是什么问题?谢谢。

标签: phplaravel

解决方案


我找到了解决这个问题的方法,诀窍是在前端使用 JSON.stringify(data) 并且 json_decode 可以正常工作。

前端代码:

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 () {
    $x = {
       "test":"hello"
    };
    $.ajax({
        url:"/execute",
        type:"POST",
        contentType: 'application/json',
        data:JSON.stringify($x),
        success:function (data) {
            console.log(data);
        }
    });


});
</script>

控制器代码:

public function executeFunction(Request $request){

          if($request->header()['content-type'][0] === 'application/json')
          {

              Log::info(json_decode($request->getContent())->test);
          }

    }

如果您转储内容,这将是结果:

object(stdClass)#423 (1) {
  ["test"]=>
  string(5) "hello"
}

推荐阅读