2017-07-06 18 views
1

ここで私の髪を引っ張っています。私はLaravelのAjaxリクエストで送信されたデータにアクセスできません。私はformDataと単なる普通のオブジェクトを使ってみました。たびに、LaravelのデフォルトのRequestオブジェクトが表示され、私が提出したデータは表示されません。ここでLaravelでAJAXデータを取得する

は、私のJS(活字体)です:

$('#save-section-order').on('click', function(e){ 
    e.preventDefault(); 

    let $this = $(this); 
    let data = []; 

    const order = $('#sortable').sortable('serialize'); 
    const project_id = $this.data('id'); 
    const url = "/admin/save-new-order"; 
    const csrfToken = $this.data('csrf'); 

    $.ajax({ 
     url: url, 
     type: 'POST', 
     data: { 
      order: order, 
      project_id: project_id 
     }, 
     contentType: false, 
     processData: false, 
     headers: { 
      'X-CSRF-TOKEN': csrfToken, 
      'X-HTTP-Method-Override': 'PATCH' 
     }, 
     success: function(msg) { 
      if (msg.status === 'success') { 
       $this.parent().parent().fadeOut(); 
      } 
     }, 
     error: function(data) { 
      if (data.status !== 200) { 
       $this.parent().parent().css('background-color', '#f2dede'); 
      } 
     } 
    }); 
}); 

ここに私のウェブルートがあります:

Route::patch('/admin/save-new-order', 'Admin\[email protected]');

ここに私のProjectsControllerです:

public function saveSectionsOrder(Request $request) { 

    dd($request); 

} 

出力は常に一般的なRequestですオブジェクトと私はretriできません私が$request->orderまたは$request->input('order')によって提出したデータ

私は本当に明白な何かを見逃していることを知っていますが、私は何を見ることができません。

+0

'dd($ request-> all());'を試したことがありますか?出力は何ですか? – OuailB

+0

あなたのJSの 'order'は実際にデータを持っていますか? – Shauna

+0

'contentType:false、 'も削除してみますか? –

答えて

3

:それとも、名前によって直接アクセスすることができます。

Per docs (emphasis mine):

このコンテンツタイプを使用して、サーバーにデータを送信します。デフォルトは "application/x-www-form-urlencoded; charset = UTF-8"で、ほとんどの場合 で問題ありません。コンテンツタイプを$ .ajax()に明示的に渡すと、 (データが送信されない場合でも)は常にサーバに送信されます。 jQuery 1.6からfalseを渡して、jQueryにコンテンツを設定しないように指示することができます。 タイプのヘッダー。注:W3C XMLHttpRequest仕様では、 の文字セットは常にUTF-8であることが示されています。別の文字セットを指定しても、ブラウザはエンコーディングを変更することはありません( )。注:クロスドメイン要求の場合、 コンテンツタイプを application/x-www-form-urlencoded、multipart/form-data、またはtext/plain以外に設定すると はプリフライトOPTIONS要求をブラウザに送信しますサーバー

さらに適切なものに変更するか、削除してデフォルトのapplication/x-www-form-urlencodedにします。

また、送信するデータの性質にもよりますが、processData: falseのままにしておきますが、それ以外の場合は削除してください。

0

要求オブジェクトからのデータを受信するために、あなたは、このコマンドは、渡されたデータのあなたの配列を取得します

$request->all() 

を使用する必要があります。あなたは何のコンテンツを持っていないこと$アヤックスを伝えるcontentType: falseを、持っている

$request->input('order') 
+0

質問には '$ request-> input( 'order')'を使ってデータを得ることができないと書かれています。 – Shauna

+0

ああ! $ .ajax processData:を削除します。 – omadonex

+0

'processData:false'を削除しました。 '$ request-> input( 'order')'と '$ request-> input( 'project_id')'からの出力はnullです:( –

関連する問題