2017-12-21 19 views
1

laravel v5.5.24で動作するようにajaxポストを取得することができません。ここに私のAJAX呼び出しが次のようになります。ここではCSRFトークンが含まれていても、Laravel ajaxポストが機能しない

var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content'); 
$.ajaxSetup({ 
    headers: { 
     'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
    } 
}); 
$.ajax({ 
    url: "/postCustomer?XDEBUG_SESSION_START=19683", 
    type: 'POST', 
    data: {_token: CSRF_TOKEN, message:myData, "_method": 'POST'}, 
    dataType: 'JSON', 
    success: function (data) { 
     console.log('call to postCustomer successful'); 
    } 
}); 

は私のルートです:

Route::post('/postCustomer','[email protected]'); 

この問題について興味深いのは、すべてのポストのがの(両方のAJAX呼び出し中に取得するように変更された場合ということですそして経路で)要求は到着し、正しく処理されます。デバッグが起動され、すべて正常です。ただし、ルートとajax呼び出しがPOSTに設定されていると、デバッグは実行されず、リクエストは実行されません。もちろん、これはCRSFの問題のような臭いですが、ヘッダーにCRSFトークンを含めています。

+0

あなたは、データオブジェクト内の '_token'を渡す必要はありません。 CSRFトークンは自動的に '$ .ajaxSetup()'によってヘッダに追加されます。ネットワークリクエストのスクリーンショットを投稿できますか? –

+0

フォームのタグ内にコードを投稿できますか? –

+0

あなたはコンソールにチェックを入れましたか? – Bugfixer

答えて

0

.blade.phpファイル内のJavaScriptコードは、この

data: {_token:'{{ csrf_field() }}', message:myData, "_method": 'POST'}, 

はその助け

+0

返信いただきありがとうございますが、動作しませんでした。 –

+0

あなたはどんなエラーになりましたか? は正しいですか? 私は通常次のURLでこれを行います: url: "{{url( 'postCustomer')}}" + '?' + 'XDEBUG_SESSION_START = 19683' –

0

はAjaxデータにトークンを渡す必要 <meta name="_token" content="{!! csrf_token() !!}"/>

$.ajaxSetup({ 
     headers: 
      {'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')} 
    }); 
$.ajax({ 
    url: "/postCustomer?XDEBUG_SESSION_START=19683", 
    type: 'POST', 
    data: {message:myData, "_method": 'POST'}, 
    dataType: 'JSON', 
    success: function (data) { 
     console.log('call to postCustomer successful'); 
    }}); 

、これを試していない願っていますしようとした場合再び。

0

返信いただいた皆様に感謝します。いくつかのことが、この事を挫折させるのに役立った。まず、CSRFトークンの言及を に統合し、データとして送信していたものだけに限定しました.aJaxSetupでCSRFトークンをデータに含める必要はありません。 2番目のものは私のポストからは見えませんでしたが、私はajaxトランザクションを引き起こしたボタンを含む競合状態に遭遇していました。ボタンはAJAXがそのことをする前にページのリロードを引き起こしていたため、時には動作するように見えるかもしれませんが、そのほとんどは動作しません。したがって、falseを返すことは、おそらく両方の場所ではなく、おそらくajaxトランザクションが呼び出され、コールバックを待っていることを防ぐために必要です。動作するコードは以下にあります。私は、他の誰かがPOSTがうまくいかないかを調べる方法を試して怒っている夜を過ごすのを防ぐでしょう。あなたのCSRFをajaxSetupコールで処理し、ビジネス全体からfalseを返します。

もう一度おねがいします。

-George Pipkin アフトン、バージニア州

   $.ajaxSetup({ 
        headers: { 
         'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
        } 
       }); 
       $.ajax({ 
        /* the route pointing to the post function */ 
        url: "/postCustomer?XDEBUG_SESSION_START=19159", 
        type: 'POST', 
        /* send the csrf-token and the input to the controller */ 
        data: {message:myData}, 
        dataType: 'json', 
        /* remind that 'data' is the response of the AjaxController */ 
        success: function (data) { 
         $("#success_msg").show(); 
         return false; 
        } 
       }); 
       return false; 
関連する問題