首先我不知道如何$ajax
正在设置变量(isset($ajax)
),但是检查 ajax 请求的正确方法是Laravel
is
if(Request::ajax()) {
// ...
}
或者,缩写形式(使用ternary单个表达式中的运算符)
$ajax = Request::ajax() ? true : false;
因此,根据您的另一个答案的链接,这应该有效
@extends(((Request::ajax()) ? 'layouts.ajax' : 'layouts.master'))
这是如何运作的?
In 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();
}
Here isXmlHttpRequest()
是一个扩展方法Request.php
类的Symphony
, 因为Laravel
's Request
类扩展Symfony\Component\HttpFoundation\Request.php
在这个类中有一个 main 方法来确定ajax
请求者
public function isXmlHttpRequest()
{
return 'XMLHttpRequest' == $this->headers->get('X-Requested-With');
}
So, if X-Requested-With
设置了请求头,那么它是一个ajax请求,如果没有发送这个头,那么它不是一个ajax
要求。所以,问题是如何isset($ajax)
正在设置,如果它是由您设置的,那么jQuery
您正在使用的库没有执行此操作,但它正在发送X-Requested-With
相反,请求标头,在这种情况下您应该使用Laravel
's Request::ajax()
的方法来确定ajax
要求。
顺便说一句,我更喜欢使用完全不同的view
for ajax
不扩展的请求master
布局。你可能会喜欢这个检测 Ajax 请求-Php 和框架.