2

この質問のコードを使用して、

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

Ajax を確認します。通常の Ajax ページの読み込みでは機能しますが、ポップアップを使用する場合は機能しません。

この場合、私は Magnific Popup の Ajax モードを使用しています。リクエスト ヘッダーは XMLHttpRequest ですが、Laravel は非 ajax (拡張) レイアウトを返します。

4

1 に答える 1

10

まず第一に、$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.phpSymphonyLaravelRequestSymfony\Component\HttpFoundation\Request.phpajax

public function isXmlHttpRequest()
{
    return 'XMLHttpRequest' == $this->headers->get('X-Requested-With');
}

したがって、X-Requested-Withリクエスト ヘッダーが設定されている場合は ajax リクエストであり、このヘッダーが送信されていない場合はリクエストではありませんajax。したがって、問題はどのようisset($ajax)に設定されているかです。あなたが設定した場合、jQuery使用しているライブラリはそれを実行していませんが、X-Requested-With代わりにリクエストヘッダーを送信しています。この場合、LaravelRequest::ajax()メソッドを使用してajaxリクエストを決定する必要があります。

ところで、レイアウトを拡張しない完全に異なるリクエストをview使用したいと思います。このDetect Ajax Request-Php And Frameworksが好きかもしれません。ajaxmaster

于 2013-11-23T20:39:37.533 に答える