【问题标题】:Laravel 4 Ajax check to include XMLHttpRequest (from Magnific Popup)Laravel 4 Ajax 检查以包含 XMLHttpRequest(来自 Magnific Popup)
【发布时间】:2013-12-08 14:24:00
【问题描述】:

使用the code from this question

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

检查 Ajax。它适用于常规 Ajax 页面加载,但不适用于使用弹出窗口。

在这种情况下,我使用 Magnific Popup 的 Ajax 模式,请求标头是 XMLHttpRequest 但 Laravel 返回非 ajax(扩展)布局。

【问题讨论】:

    标签: php ajax laravel magnific-popup


    【解决方案1】:

    首先我不知道$ajax 变量是如何设置的(isset($ajax)),但是在Laravel 中检查ajax 请求的正确方法是

    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()SymphonyRequest.php 类的扩展方法,因为LaravelRequest 类扩展了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 请求标头,在这种情况下你应该使用@987654345 @的Request::ajax()方法来判断ajax请求。

    顺便说一句,对于不扩展 master 布局的 ajax 请求,我更愿意使用完全不同的 view。你可能会喜欢这个Detect Ajax Request-Php And Frameworks

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多