Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel响应json在实际响应之后添加空的花括号_Php_Laravel_Laravel 5.2 - Fatal编程技术网

Php Laravel响应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([ '

我在一个没有路由直接调用的函数中发送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也不走运。@jrenk
send
方法不在de中,我认为您的问题有另一个根源。这对OP的
saveData
函数不起作用,因为它不是由路由直接调用的,所以需要
->send()
函数来发送标题和内容。说得好:)来解决问题。谢谢你的书面答覆。