2013-11-23 2 views
2

Использование the code from this question,Laravel 4 Ajax проверки включить XMLHttpRequest (от Magnific Popup)

@extends('layouts.' . isset($ajax) ? 'ajax' : 'master') 

для проверки Ajax. Он работает для регулярных загрузок страниц Ajax, но не при использовании всплывающего окна.

В этом случае я использую режим Ajax в режиме Magnific Popup, заголовок запроса - XMLHttpRequest, но Laravel возвращает неаксиальный (расширенный) макет.

ответ

9

Прежде всего, я не знаю, как переменная $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.

Смежные вопросы