Laravel - 检查Ajax是否请求

时间:2015-03-24 11:33:53

标签: php laravel

我一直试图找到一种方法来确定Laravel中的ajax调用,但我找不到任何关于它的文档。

我有一个index()函数,我希望根据请求的性质来区别对待情况。基本上这是一个绑定到GET请求的资源控制器方法。

public function index()
    {
        if(!$this->isLogin())
            return Redirect::to('login');

        if(isAjax()) // This is what i am needing.
        {
          return $JSON;
        }

        $data = array();
        $data['records'] = $this->table->fetchAll();

        $this->setLayout(compact('data'));
    }

我知道在PHP中确定Ajax请求的其他方法,但我想要一些特定于Laravel的东西。

由于

更新

我尝试使用

 if(Request::ajax())
    {
        echo 'Ajax';
    }

但我收到错误:Non-static method Illuminate\Http\Request::ajax() should not be called statically, assuming $this from incompatible context

该类显示这不是静态方法。

12 个答案:

答案 0 :(得分:142)

也许这有帮助。你必须参考@param

         /**       
         * Display a listing of the resource.
         *
         * @param  Illuminate\Http\Request $request
         * @return Response
         */
        public function index(Request $request)
        {
            if($request->ajax()){
                return "AJAX";
            }
            return "HTTP";
        }

答案 1 :(得分:17)

要检查ajax请求,您可以使用if (Request::ajax())

注意: 如果您使用的是laravel 5,则在控制器中替换

use Illuminate\Http\Request;

use Request; 

我希望它能奏效。

答案 2 :(得分:14)

您使用的是错误的Request课程。如果您想使用Facade,如:Request::ajax(),则必须导入此类:

use Illuminate\Support\Facades\Request;

而不是Illumiante\Http\Request


另一个解决方案是注入实际请求类的实例:

public function index(Request $request){
    if($request->ajax()){
        return "AJAX";
    }

(现在你必须导入Illuminate\Http\Request

答案 3 :(得分:8)

if(Request::ajax()) 

看起来是正确的答案。 http://laravel.com/api/5.0/Illuminate/Http/Request.html#method_ajax

答案 4 :(得分:6)

对于使用 AngularJS 前端的人,它不使用laravel所期望的Ajax头。 (Read more

对AngularJS使用Request::wantsJson()

if(Request::wantsJson()) { 
    // Client wants JSON returned 
}

答案 5 :(得分:5)

那些喜欢使用laravel帮助者的人可以使用laravel request()帮助程序检查请求是否为ajax。

if(request()->ajax())
   // code

答案 6 :(得分:4)

$ request-> wantsJson()

如果$request->wantsJson()不起作用,您可以尝试$request->ajax()

如果您的JavaScript库设置了X-Requested-With HTTP标头,则

$request->ajax()将起作用。

Laravel默认在js / bootstrap.js中设置此标头

window.axios = require('axios');

window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

就我而言,我使用了不同的前端代码,并且必须手动放置此标头才能使$request->ajax()正常工作。

但是$request->wantsJson()将检查axios查询,而无需标题X-Requested-With

// Determine if the current request is asking for JSON. This checks Content-Type equals application/json.
$request->wantsJson()
// or 
\Request::wantsJson() // not \Illuminate\Http\Request

答案 7 :(得分:2)

有时Request::ajax()不起作用,请使用\Request::ajax()

答案 8 :(得分:1)

public function index()
{
    if(!$this->isLogin())
        return Redirect::to('login');

    if(Request::ajax()) // This is check ajax request
    {
      return $JSON;
    }

    $data = array();
    $data['records'] = $this->table->fetchAll();

    $this->setLayout(compact('data'));
}

答案 9 :(得分:0)

在编写jquery代码后,在您的路由或控制器中执行此验证。

url: Backand.getApiUrl() +"/1/objects/blogs?deep=true"

答案 10 :(得分:0)

大多数答案都工作正常。我们还可以检查请求标头

request()->header('Accept')=='application/json'

检查请求类型

答案 11 :(得分:0)

Do something like this
public function functionName(User $user): string
{
    (string) $message = "";
    // check if request is ajax
    if(request()->ajax())
    {
        if($this->isOwner($user->id)){
            $message = 'success';
        }else{
            $message = "You are unauthorized to perform this action.";
        }
    }else{
        $message = 'Wrong server request';
    }
    return $message;        
}