发送 json 响应的正确方式

Proper way of sending json response

我以前在controller方法里写的:

echo json_encode(TRUE);die;

将成功消息传递给 AJAX 这样。 例如

if($user->save())
{
    echo json_encode(TRUE);die;
}

并在 ajax 中:

 success: function (data) {
            var res = $.parseJSON(data);
            if(res == true)
            {
               alert('user added!');

            }

但后来我看到最多的是: return Response::json(TRUE); die; 而不是 echo json_encode(TRUE);die; 这两者有什么区别?或者它与 echo vs return 完全相似吗?

我建议你回显一个函数的结果。例如:

function save(){
    //magic happens here
    return $result; //can be false or true (for example)
}

并且在 ajax 请求中调用的文件中简单地输入:

echo json_encode(save());

终于可以在客户端对比结果了:

success: function(response){
    var result = $.parseJSON(response);
    if(result) alert("Success!");
    else alert("Sorry try later");
}

如果您只是回显文本,您的响应将以 plain/html 的内容类型发回。

如果您 return response()->json(),那么您的回复将以 application/json 的内容类型发回。

一些客户可能不关心这种或另一种方式,但如果 headers 说响应是 json,其他客户可能会有不同的行为。在任何一种情况下,application/json 响应在语义上都更正确。

我就是这样做的,非常标准。我已经创建了一个 helpers.php 文件并将其放入 composer.json 中,因此无需将其进一步包含在应用程序中。

composer.json

 "autoload": {
     "files": [
      "app/Utils/helper.php"
    ]
  }

运行命令

composer dumpautoload.

在 helpers.php

中创建成功响应的方法
function success($data, $message, $status = 200, $headers = [])
{
    $result = [];

    $result['flag'] = true;
    $result['message'] = $message;
    $result['data'] = $data;

    return response()->json($result, $status, $headers);
}

正在从控制器发送成功消息。

return success($user, 'User logged in successfully.');

在 helpers.php

中创建错误响应方法
function error($code, $message, $status = 200, $errors = [], $headers = [])
{
    $error = [];

    $error['flag'] = false;
    $error['message'] = $message;
    $error['code'] = $code;

    if (!empty($errors))
    {
        $error['errors'] = $errors;
    }

    return response()->json($error, $status, $headers);
}

正在从控制器发送错误消息。

return error(401, 'These credentials do not match our records.',401);