この質問のコードを使用して、
@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