我一直试图找到一种方法来确定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
该类显示这不是静态方法。
答案 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->ajax()
$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;
}