Json 控制器响应异常行为
我不理解我的Laravel控制器中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
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,我只想理解^^^无论如何感谢您抽出时间