Php Laravel-检查是否存在Ajax请求
我一直试图找到一种方法来确定Laravel中的ajax调用,但我没有找到任何关于它的文档 我有一个Php Laravel-检查是否存在Ajax请求,php,laravel,Php,Laravel,我一直试图找到一种方法来确定Laravel中的ajax调用,但我没有找到任何关于它的文档 我有一个index()。基本上,这是一个资源控制器方法,它绑定到获取请求 public function index() { if(!$this->isLogin()) return Redirect::to('login'); if(isAjax()) // This is what i am needing. {
index()。基本上,这是一个资源控制器方法,它绑定到获取请求
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';
}
但我收到了一个错误:非静态方法\Http\Request::ajax()不应该静态调用,假设$this来自不兼容的上下文
该类表明这不是一个静态方法
if(Request::ajax())
看来这是正确的答案。
也许这有帮助。您必须参考@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";
}
您使用了错误的请求
类。如果要使用Facade,如:Request::ajax()
,则必须导入此类:
use Illuminate\Support\Facades\Request;
而不是Illumiante\Http\Request
另一种解决方案是注入真实请求类的实例:
public function index(Request $request){
if($request->ajax()){
return "AJAX";
}
(现在您必须导入illighted\Http\Request
)来检查ajax请求,如果(Request::ajax())
注:
如果您使用的是laravel 5,则在控制器中更换
use Illuminate\Http\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前端的用户,它不使用laravel期望的Ajax头。() 用于AngularJS:
if(Request::wantsJson()) {
// Client wants JSON returned
}
有时
Request::ajax()
不起作用,然后使用\Request::ajax()
那些喜欢使用laravel助手的人可以使用laravelRequest()
helper检查请求是否是ajax
if(request()->ajax())
// code
$request->wantsJson()
如果$request->ajax()
不起作用,您可以尝试$request->wantsJson()
$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-request-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'
要检查请求类型,您是对的。这将适用于我的情况,因为我正在使用illighted\Http\Request的名称空间代码>在我的控制器中。谢谢如果需要,您也可以使用“request()->ajax()”。我可以在5.2中确认这一点。我使用了helperrequest()->ajax()
谢谢!我不确定这是否是您的意思,但Laravel使用Facade设计模式,这样您的调用可以像静态方法一样进行:该链接显示了Laravel使用的Facades列表。你在控制器中使用它吗?我使用了错误的use语句。抱歉,但感谢您对Facades的概述:)这是信息性的。您是对的。我修好了。另一个人在上面写了一个使用声明,我没有看。谢谢:)如果不使用名称空间,它将不起作用。无论如何,谢谢这应该是现在的答案
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;
}
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;
}