Gab*_*arp 2 php ajax laravel magnific-popup
使用这个问题的代码,
@extends('layouts.' . isset($ajax) ? 'ajax' : 'master')
Run Code Online (Sandbox Code Playgroud)
检查Ajax.它适用于常规Ajax页面加载,但不适用于使用弹出窗口.
在这种情况下我使用弹出Magnific酒店的Ajax模式中,请求头是XMLHttpRequest的但Laravel返回非Ajax(扩展)的布局.
首先,我不知道$ajax变量是如何设置的(isset($ajax)),但检查ajax请求的正确方法Laravel是
if(Request::ajax()) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
或者,简短形式(在单个表达式中使用三元运算符)
$ajax = Request::ajax() ? true : false;
Run Code Online (Sandbox Code Playgroud)
所以,根据你的另一个答案的链接,这应该工作
@extends(((Request::ajax()) ? 'layouts.ajax' : 'layouts.master'))
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?
在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();
}
Run Code Online (Sandbox Code Playgroud)
这里isXmlHttpRequest()是从延伸方法 Request.php类的Symphony,因为Laravel的Request类扩展Symfony\Component\HttpFoundation\Request.php和在这个类有其确定的主要方法ajax通过请求
public function isXmlHttpRequest()
{
return 'XMLHttpRequest' == $this->headers->get('X-Requested-With');
}
Run Code Online (Sandbox Code Playgroud)
因此,如果X-Requested-With设置了请求标头,则它是ajax请求,如果未发送此标头,那么它不是ajax请求.所以,问题是如何isset($ajax)设置,如果它是由你设置的,那么jQuery你正在使用它的库不会这样做,而是发送X-Requested-With请求头,在这种情况下你应该使用Laravel's Request::ajax()方法来确定ajax请求.
顺便说一句,我更喜欢使用完全不同view的ajax请求,不扩展master布局.你可能会喜欢这个检测Ajax Request-Php和Frameworks.
| 归档时间: |
|
| 查看次数: |
3923 次 |
| 最近记录: |