Laravel - 检查是否有 Ajax 请求
Laravel - check if Ajax request
我一直在努力寻找一种方法来确定 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
class表明这不是静态方法。
if(Request::ajax())
看起来是正确答案。
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
class。如果你想像这样使用 Facade:Request::ajax()
你必须导入这个 class:
use Illuminate\Support\Facades\Request;
而不是Illumiante\Http\Request
另一种解决方案是注入真实请求的实例 class:
public function index(Request $request){
if($request->ajax()){
return "AJAX";
}
(现在你必须导入Illuminate\Http\Request
)
要检查 ajax 请求,您可以使用 if (Request::ajax())
注意:
如果您使用 laravel 5,则在控制器中替换
use Illuminate\Http\Request;
和
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 front-end 的人,它不使用 Ajax header laravel正在期待。 (Read more)
对AngularJS使用Request::wantsJson():
if(Request::wantsJson()) {
// Client wants JSON returned
}
有时候Request::ajax()
不行,那就用\Request::ajax()
那些喜欢使用 laravel 助手的人可以使用 laravel request()
助手检查请求是否 ajax。
if(request()->ajax())
// code
$request->wantsJson()
如果$request->ajax()
不行,你可以试试$request->wantsJson()
如果您的 JavaScript 库设置 X-Requested-With HTTP header.,$request->ajax()
会起作用
默认情况下 Laravel 在 js/bootstrap.js
中设置此 header
window.axios = require('axios');
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
在我的例子中,我使用了不同的前端代码,我必须手动输入这个 header 才能使 $request->ajax()
工作。
但是 $request->wantsJson()
将检查 axios 查询而不需要 header 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;
}
我一直在努力寻找一种方法来确定 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
class表明这不是静态方法。
if(Request::ajax())
看起来是正确答案。 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
class。如果你想像这样使用 Facade:Request::ajax()
你必须导入这个 class:
use Illuminate\Support\Facades\Request;
而不是Illumiante\Http\Request
另一种解决方案是注入真实请求的实例 class:
public function index(Request $request){
if($request->ajax()){
return "AJAX";
}
(现在你必须导入Illuminate\Http\Request
)
要检查 ajax 请求,您可以使用 if (Request::ajax())
注意: 如果您使用 laravel 5,则在控制器中替换
use Illuminate\Http\Request;
和
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 front-end 的人,它不使用 Ajax header laravel正在期待。 (Read more)
对AngularJS使用Request::wantsJson():
if(Request::wantsJson()) {
// Client wants JSON returned
}
有时候Request::ajax()
不行,那就用\Request::ajax()
那些喜欢使用 laravel 助手的人可以使用 laravel request()
助手检查请求是否 ajax。
if(request()->ajax())
// code
$request->wantsJson()
如果$request->ajax()
不行,你可以试试$request->wantsJson()
$request->ajax()
会起作用
默认情况下 Laravel 在 js/bootstrap.js
中设置此 headerwindow.axios = require('axios');
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
在我的例子中,我使用了不同的前端代码,我必须手动输入这个 header 才能使 $request->ajax()
工作。
但是 $request->wantsJson()
将检查 axios 查询而不需要 header 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;
}