Прежде всего, я не знаю, как переменная $ajax
создается (isset($ajax)
), но правильный способ проверить для AJAX запроса в Laravel
является
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()
является расширенным метод из Request.php
класса Symphony
, потому что Laravel
«s 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
, и в этом случае вы должны использовать метод для определения ajax
запрос.
BTW, я бы предпочел использовать совершенно другой view
для ajax
запрос, который не распространяется master
макет. Вам может понравиться это Detect Ajax Request-Php And Frameworks.