控制器不能 return false

Can't return false with controller

我遇到了一个我不明白的问题。 (我是 php 和 jquery 的新手)。我似乎无法获得 return false 的函数,当传递给 jq 中的某些东西时它将 return null。

我用这个调用函数:

$.ajax({
    method: "GET",
    url: "/auth/check/",
    success: function (response) {
        alert(response);
    }
});

我有一个函数:

public function authUser()
{
    $r = false;
    if (Auth::check()) {
        $r = true;
    }
    return $r;
}

或者在一条路线内,两者做同样的事情。

Route::get('auth/check',function() {
    return (Auth::check()) ? True : False;
});

使用 dd 我可以确认它们确实会导致错误或正确。然而,当它被 returned 时,对我的 jq 的响应为空。 但是,如果我将 false 更改为其他内容,比如字符串 'test' 它将 return 'test'.

当我希望它为 false 时,我可以通过将 return 更改为 0 来解决这个问题,但我想知道是什么导致了这种行为?

您需要 return false 作为 JSON 对象 :

Route::get('auth/check',function() {
     $authStatus = (Auth::check()) ? True : False ;
     return response()->json([
        'isAuth' => $authStatus
    ]);
});


要使用您的 javascript 访问它,请使用:

...

success: function (response) {
    alert(response.isAuth);
}
...

如果您 return 一个字符串而不是布尔值,Laravel 应该将其转换为完整响应并 return 将其发送给客户端

Route::get('auth/check',function() { return (Auth::check()) ? 'True' : 'False'; });

您可以 return 来自控制器的基本字符串或数组,并自动生成响应。如果你想要更多的控制,你可以自己创建 response 对象。您可以阅读更多相关信息 here