Laravel-Ajax 요청 여부 확인


96

나는 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

클래스는 이것이 정적 메서드가 아님을 보여줍니다.

답변:


191

아마도 이것이 도움이 될 것입니다. @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";
        }

당신이 옳습니다. 이것은 Illuminate\Http\Request;컨트롤러에서 네임 스페이스를 사용하고 있으므로 제 경우에는 작동 합니다. 감사합니다
Raheel 2015 년

1
필요한 경우 "request ()-> ajax ()"를 사용할 수도 있습니다
badcom

5.2에서 작동하는지 확인할 수 있습니다. 헬퍼를 사용했습니다. request()->ajax()감사합니다!
cbloss793

22

ajax 요청을 확인하려면 다음을 사용할 수 있습니다. if (Request::ajax())

참고 : laravel 5를 사용하는 경우 컨트롤러에서

use Illuminate\Http\Request;

use Request; 

나는 그것이 효과가 있기를 바랍니다.


20

잘못된 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)


당신이 옳습니다. 나는 그것을 고쳤다. 다른 사람이 위의 사용 진술을 썼는데 나는 그것을 보지 않았습니다. 감사합니다 :)
Raheel

16

$ request-> wantsJson ()

작동하지 않으면 시도 $request->wantsJson()할 수 있습니다.$request->ajax()

$request->ajax() JavaScript 라이브러리가 X-Requested-With HTTP 헤더를 설정하면 작동합니다.

기본적으로 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

9
if(Request::ajax()) 

정답 인 것 같습니다. http://laravel.com/api/5.0/Illuminate/Http/Request.html#method_ajax


1
이것이 의미하는지 확실하지 않지만 Laravel은 Facade 디자인 패턴을 사용하여 정적 메서드처럼 호출 할 수 있습니다. laravel.com/docs/4.2/facades#facade-class-reference 해당 링크는 Laravel이 사용하는 Facades 목록. 컨트롤러에서 사용하고 있습니까?
Matthew Way

나는 잘못된 사용 진술을 사용하고 있었다. 죄송하지만 Facades의 개요에 감사드립니다. :) 이것은 유익합니다.
Raheel 2015 년


6

laravel request()helper 를 선호하는 사람들은 laravel helper를 사용하여 요청이 ajax인지 확인할 수 있습니다 .

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

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

2

때때로 Request::ajax()작동하지 않는 경우\Request::ajax()


네임 스페이스를 사용하지 않으면 작동하지 않습니다. 어쨌든 감사합니다
Raheel

0

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';}
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.