Laravel Json响应无法正常工作

时间:2018-11-06 18:48:57

标签: laravel laravel-5.7 jsonresponse

响应对象为空时无法获取响应。当对象有数据返回时,效果很好。

public function show($id)
{
    $associates = Associate::find_by_id($id);
    if(count($associates)<1)
    {
        $output = array('message' => 'No Records Found');
        $status = 204;

    }
    else{
        $output = array('message' => 'success','data'=>$associates);
        $status = 200;
    }
    return response()->json($output,$status);
}

当$ associate对象为空时,没有响应。 $ associate不为空时的响应:

{
"message": "success",
"data": [
    {
        "first_name": "xxx",
        "last_name": "xxx",
        "mobile": xxxxxxxxxx,
        "email": "xxxxxx@xxxxx",
        "city": "xxxxx",
        "state": "xxxxxx",
        "pincode": "xxxxx"
    }
  ]
}

3 个答案:

答案 0 :(得分:0)

我对于状态码204有同样的问题。 我相信这是在这里造成的。然后,Illuminate \ Foundation \ Application类正在捕获该异常并抛出HttpException。

我认为最简单的解决方法是使控制器返回以下内容:

return Response::make("", 204);

返回空消息。 检查代码中的status_code以在前端显示消息。

答案 1 :(得分:0)

如果使用路由模型绑定来查找记录的ID,将会更容易。有关更多信息,请检查https://laravel.com/docs/5.7/routing#route-model-binding

我认为下面的代码片段应该有效。

if ($associates) {
    $output = array('message' => 'success','data'=>$associates);
    $status = 200;
} else {
    $output = array('message' => 'No Records Found');
    $status = 204;
}

答案 2 :(得分:0)

我重写了该函数供您参考。

顺便说一句。如果函数仅返回一条记录,则通常在变量名中使用单数名词。

public function show($id)
{
    // Use find() instead of find_by_id()
    $associate = Associate::find($id);

    // $associate will be null if not matching any record.
    if (is_null($associate)) {

        // If $associate is null, return error message right away.
        return response()->json([
            'message' => 'No Records Found',
        ], 204);
    }

    // Or return matches data at the end.
    return response()->json([
        'message' => 'success',
        'data' => $associate,
    ], 204);
}