Laravel-Ajaxリクエストかどうかを確認する


95

私は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

クラスは、これが静的メソッドではないことを示しています。

回答:


190

多分これは役立ちます。@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

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

15

$ 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が使用するファサードのリスト。コントローラで使用していますか?
Matthew Way

私は間違った使用ステートメントを使用していました。申し訳ありませんが、ファサードの概要に感謝します:)これは参考情報です。
Raheel、2015年


6

laravelヘルパーの使用を好む人は、リクエストがlaravel request()ヘルパーを使用して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.