Php Laravel响应json在实际响应之后添加空的花括号
我在一个没有路由直接调用的函数中发送json响应,因此我添加了Php Laravel响应json在实际响应之后添加空的花括号,php,laravel,laravel-5.2,Php,Laravel,Laravel 5.2,我在一个没有路由直接调用的函数中发送json响应,因此我添加了send()函数,如下所示: return response()->json([ 'key' => 'value' ], 400)->send(); 这将导致浏览器中出现以下响应: {"key":"value"}{} 这些空的花括号是从哪里来的?我怎样才能摆脱它们,因为这会导致前端无法识别真正的响应 为了解决这个问题,简化代码如下所示: return response()->json([ '
send()
函数,如下所示:
return response()->json([
'key' => 'value'
], 400)->send();
这将导致浏览器中出现以下响应:
{"key":"value"}{}
这些空的花括号是从哪里来的?我怎样才能摆脱它们,因为这会导致前端无法识别真正的响应
为了解决这个问题,简化代码如下所示:
return response()->json([
'key' => 'value'
], 400)->send();
routes.php
Route::post('/validate', 'ValidationController@validate');
public function validate(Request $request)
{
// Does some validation
$this->saveData($request);
}
private function saveData(Request $request)
{
// saves the data
try {
// Tries something
} catch (\Throwable $exception) {
return response()->json([
'key' => 'value'
], 400)->send();
}
// saves the data
}
ValidationController.php
Route::post('/validate', 'ValidationController@validate');
public function validate(Request $request)
{
// Does some validation
$this->saveData($request);
}
private function saveData(Request $request)
{
// saves the data
try {
// Tries something
} catch (\Throwable $exception) {
return response()->json([
'key' => 'value'
], 400)->send();
}
// saves the data
}
response()
将自动将对象和数组变形为json。您只需执行以下操作:
return response([
'key' => 'value'
], 400)->send();
请参阅:send()
响应不一定会阻止代码进一步运行。它只是将响应写入OB。控制器中没有任何东西可以阻止进一步执行(如返回将要执行的操作)。事实上,它只在FastCGI环境中这样做,因为它在内部调用FastCGI\u finish\u请求
如果您使用Apache,您的问题很容易重现:
response(['test'=>'testdata'])->send();
返回响应()->json(null);
//-->{“测试”:“测试数据”}{}
幸运的是,还有帮助程序。如果使用它而不是send()
,它会将响应作为HttpResponseException
抛出,从而阻止进一步的代码执行(->可能会写入OB/output的其他响应)
还有一些见解:
我猜你在控制器中编写了//保存数据
,最后你得到了某种返回值
,返回一个空值
天真的解决方案是:
send()后退出
——真难看
return
将响应返回给控制器,检查方法的返回值,如instanceof response
并进一步返回
throwResponse
提供了非常有用/方便的解决方案,而不是这样的解决方案。在不使用->send()的情况下进行尝试。
@Hussein这会导致返回语句被忽略。尝试以下方法:$res=['key'=>'value'];返回响应()->json($res)
@Hussein也不走运。@jrenksend
方法不在de中,我认为您的问题有另一个根源。这对OP的saveData
函数不起作用,因为它不是由路由直接调用的,所以需要->send()
函数来发送标题和内容。说得好:)来解决问题。谢谢你的书面答覆。