我曾经在控制器方法中写道:
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完全相似?
答案 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);