发送json响应的正确方法

时间:2016-12-24 03:48:53

标签: ajax laravel

我曾经在控制器方法中写道:

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完全相似?

3 个答案:

答案 0 :(得分:2)

如果您只是回复文字,您的回复将会以plain/html的内容类型发回。

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

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

答案 1 :(得分:0)

我建议你回复函数的结果。例如:

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");
}

答案 2 :(得分:0)

这就是我做的,而且非常标准。我创建了一个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);