首先我不知道$ajax 变量是如何设置的(isset($ajax)),但是在Laravel 中检查ajax 请求的正确方法是
if(Request::ajax()) {
// ...
}
或者,缩写形式(在单个表达式中使用 ternary 运算符)
$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() 是Symphony 的Request.php 类的扩展方法,因为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 请求标头,在这种情况下你应该使用@987654345 @的Request::ajax()方法来判断ajax请求。
顺便说一句,对于不扩展 master 布局的 ajax 请求,我更愿意使用完全不同的 view。你可能会喜欢这个Detect Ajax Request-Php And Frameworks。