Laravel 中如何判断是否是 Ajax 请求

我一直试图找到一种方法来确定在 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(
'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

The class shows that this is not a static method.

174080 次浏览
if(Request::ajax())

Looks to be the right answer. Http://laravel.com/api/5.0/illuminate/http/request.html#method_ajax

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'));
}

也许这会有帮助。你必须引用@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";
}

您使用了错误的 Request类。如果您想使用 Facade like: Request::ajax(),您必须导入这个类:

use Illuminate\Support\Facades\Request;

而不是 Illumiante\Http\Request


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

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

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

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

Note: 如果您使用的是 laravel5,那么在控制器中替换

use Illuminate\Http\Request;

with

use Request;

希望能成功。

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

$.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';}
});

对于那些使用 AngularJS前端的人来说,它并没有使用 Ajax 头文件

AngularJS 使用 请求: : wantsJson ():

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

有时候 Request::ajax()不起作用,那就用 \Request::ajax()

喜欢使用 laravelrequest()助手的用户可以使用 laravelrequest()助手检查请求是否是 ajax。

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

$request-> wantsJson ()

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

如果您的 JavaScript 库设置了一个 X- 请求-带 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

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

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

检查请求类型

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;
}