使用这个问题的代码,
@extends('layouts.' . isset($ajax) ? 'ajax' : 'master')
检查 Ajax。它适用于常规的 Ajax 页面加载,但不适用于使用弹出窗口。
在这种情况下,我使用 Magnific Popup 的 Ajax 模式,请求标头是 XMLHttpRequest 但 Laravel 返回非 ajax(扩展)布局。
使用这个问题的代码,
@extends('layouts.' . isset($ajax) ? 'ajax' : 'master')
检查 Ajax。它适用于常规的 Ajax 页面加载,但不适用于使用弹出窗口。
在这种情况下,我使用 Magnific Popup 的 Ajax 模式,请求标头是 XMLHttpRequest 但 Laravel 返回非 ajax(扩展)布局。
首先我不知道如何设置$ajax
变量(isset($ajax)
),但检查 ajax 请求的正确方法Laravel
是
if(Request::ajax()) {
// ...
}
或者,简短形式(在单个表达式中使用三元运算符)
$ajax = Request::ajax() ? true : false;
因此,根据您的另一个答案的链接,这应该可以
@extends(((Request::ajax()) ? 'layouts.ajax' : 'layouts.master'))
这是如何工作的?
在vendor\laravel\framework\src\Illuminate\Http
里面有一Request.php
堂课你可以看到
/**
* Determine if the request is the result of an AJAX call.
*
* @return bool
*/
public function ajax()
{
return $this->isXmlHttpRequest();
}
这isXmlHttpRequest()
是 的 Request.php
类的扩展方法Symphony
,因为Laravel
的Request
类扩展了Symfony\Component\HttpFoundation\Request.php
,并且在这个类中有一个主要方法,它ajax
通过以下方式确定请求
public function isXmlHttpRequest()
{
return 'XMLHttpRequest' == $this->headers->get('X-Requested-With');
}
因此,如果X-Requested-With
设置了请求标头,则它是一个 ajax 请求,如果未发送此标头,则它不是一个ajax
请求。所以,问题是如何isset($ajax)
设置,如果它是由你设置的,那么jQuery
你使用的库没有这样做,而是发送X-Requested-With
请求标头,在这种情况下,你应该使用Laravel
'Request::ajax()
方法来确定ajax
请求。
顺便说一句,我更愿意对不扩展布局的请求使用完全不同view
的请求。你可能会喜欢这个Detect Ajax Request-Php And Frameworks。ajax
master