Json 控制器响应异常行为

Json 控制器响应异常行为,json,ajax,laravel,controller,response,Json,Ajax,Laravel,Controller,Response,我不理解我的Laravel控制器中json响应的情况 工作正常,如预期: public function getHelloV1(Request $req) { if ($isOK == false) { return response()->json([ 'success' => false, 'msg' => 'hum...', ], 400); } retu

我不理解我的Laravel控制器中json响应的情况

工作正常,如预期:

public function getHelloV1(Request $req) {
    if ($isOK == false) {
         return response()->json([
             'success' => false,
             'msg' => 'hum...',
         ], 400);
     }

     return View::make('app.hello'); }
private test() {
     if ($isOK == false) {
         return response()->json([
             'success' => false,
             'msg' => 'hum...',
         ], 400);
     }}

public function getHelloV2(Request $req) {
     self::test();

     return View::make('app.hello');}
完全无法按预期工作:

public function getHelloV1(Request $req) {
    if ($isOK == false) {
         return response()->json([
             'success' => false,
             'msg' => 'hum...',
         ], 400);
     }

     return View::make('app.hello'); }
private test() {
     if ($isOK == false) {
         return response()->json([
             'success' => false,
             'msg' => 'hum...',
         ], 400);
     }}

public function getHelloV2(Request $req) {
     self::test();

     return View::make('app.hello');}
对于getHelloV2,已正确到达private test()(一个简单的Log::debug()确认),但不会触发json响应

有人知道为什么吗?只是想了解


仅供参考:我还尝试了
Response::json([…],400)但是相同的行为…

在第二个示例中,您在私有函数中返回响应,但不将其存储在任何地方以显示响应

在第一个示例中,您直接访问公共函数,以便处理和显示您的响应,但在第二个示例中并非如此

public function getHelloV2(Request $req) {
     self::test();

     return View::make('app.hello');
}
self:test()将到达您的私有函数测试,但您需要在那里发送变量
$isOk
变量未在私有函数中的任何位置定义,因此您需要在
getHelloV2
中定义它,并将其发送到以下测试:

public function getHelloV2(Request $req) {
     $isOk = false;
     self::test($isOk);

     return View::make('app.hello');
}
private test($isOK) {
     if ($isOK == false) {
         return response()->json([
             'success' => false,
             'msg' => 'hum...',
         ], 400);
     }}
你的私人功能应该是:

public function getHelloV2(Request $req) {
     $isOk = false;
     self::test($isOk);

     return View::make('app.hello');
}
private test($isOK) {
     if ($isOK == false) {
         return response()->json([
             'success' => false,
             'msg' => 'hum...',
         ], 400);
     }}
如果该值来自请求,只需通过请求字段进行检查

现在,在您的公共函数
getHelloV2
中,您有了测试的输出,您只需要存储它并将其显示在如下位置:

public function getHelloV2(Request $req) {
     $myOutput = self::test();

     echo $myOutput; //here is your json response
     return View::make('app.hello');
}

最好的做法是返回if检查之外的内容,以便函数始终输出内容。您可以只返回一个布尔值,但如果
$isOk
为真,您的函数应该返回一些值。

我理解您的解释,但有一点让我有点困惑。为什么json响应的返回需要是echo而不是视图的返回?如果我们将json响应的返回替换为View::make()的返回,那么它工作得很好,为什么?据我理解,这也是一种回报。我只想在控制器中考虑一些特殊情况。不足以制作中间件,但足以将其考虑在内(我猜),或者我们甚至可以用
返回重定向()->route()替换它。。。它工作得很好,我不明白为什么
返回响应()->json()
不工作:/。Redirect将为您加载一个视图并发送给您,response将只打印一条消息,但在您的情况下,该消息是在公共函数中调用的私有函数的输出。信息就在那里,你只是没有用它做任何事情。把我的答案读到最后。我已经读到了最后,我感谢你给我时间解释它=)这个问题,当然因为我的误解,也是关于回声的问题。。。在上一个示例中,您回显$myOutput,它是私有self::test()的返回,这也不会触发json响应。。。如前所述,我正在学习laravel/php,我只想理解^^^无论如何感谢您抽出时间