控制器响应异常行为

时间:2019-12-06 14:01:59

标签: json ajax laravel controller response

我在Laravel Controller中不了解这种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');}

对于getHelloV2,可以正确访问private test()(一个简单的Log :: debug()确认它),但不会触发json响应

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

仅供参考:我也尝试过Response::json([...], 400);,但行为相同...

1 个答案:

答案 0 :(得分:0)

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

在第一个示例中,您直接访问公共功能,因此您的响应得到处理和显示,但在第二个示例中情况并非如此。

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);
     }}

如果此值来自请求,则只需传递请求字段即可对其进行检查。

现在在您的公共函数getHelloV2中,您具有测试的输出,您只需将其存储并显示在以下位置即可:

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

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

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