Laravel – 检查是否有Ajax请求

我一直在试图find一种方法来确定在Laravel的Ajax调用,但我没有find任何有关它的文件。

我有一个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

这个类表明这不是一个静态的方法。

也许这有帮助。 你必须引用@参数

  /** * 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"; } 

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

注意:如果你使用的是laravel 5,那么在控制器中更换

 use Illuminate\Http\Request; 

 use Request; 

我希望它能工作。

您正在使用错误的Request类。 如果你想使用Facade如: Request::ajax()你必须导入这个类:

 use Illuminate\Support\Facades\Request; 

而不是Illumiante\Http\Request


另一个解决scheme是注入一个真正的请求类的实例:

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

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

 if(Request::ajax()) 

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

对于那些使用AngularJS前端的人来说,它并不使用Ajax头文件laravel所期望的。 ( 阅读更多 )

对AngularJS使用Request :: wantsJson() :

 if(Request::wantsJson()) { // Client wants JSON returned } 
 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')); } 

编写jQuery代码之后,在您的路由或控制器中执行此validation。

 $.ajax({ url: "/id/edit", data: name:name, method:'get', success:function(data){ console.log(data);} }); Route::get('/', function(){ if(Request::ajax()){ return 'it's ajax request';} }); 

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

Request::ajax()$request->ajax()不适用于我的情况,版本5.4.x. 我通过添加一个额外的参数来解决这个问题,指出请求是“ajax”调用。

所以像这样

 $.ajax({ method: "post", // or anything, data: { method: "ajax", data: params, // Here is your data, .... } 

而在laravel控制器中,你可以检查这个。

 if ($request->input('method') == 'ajax') { // Something to do } else { // Another things to do. }