发送 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);
我以前在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);