Php 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. {

我一直试图找到一种方法来确定Laravel中的ajax调用,但我没有找到任何关于它的文档

我有一个
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助手的人可以使用laravel
Request()
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中确认这一点。我使用了helper
request()->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;        
}