2017-12-07 19 views
0

Yii :: $ app-> request-> post()を使用してコントローラアクションでAJAX経由で投稿された$ _POST配列を読み込もうとしていますが、何か奇妙なことが起こります。ajax投稿データが読み込まれないyii2

のjQuery: `

function renderGridView() { 
    var formId = $('#input-field :input[value!=""]'); 
    // extract values. Make sure to send _csrf token 

    $.ajax({ 
     url: "?r=value-search%2Fsearch", //this one works 
     method: 'POST', 
     data: { 
      searchData: formId.serializeArray(), 
     }, 
     success: function(response) { //JSON array is returned. 
      /*$('#resultGrid').DataTable({ 
       data: [ 
        response['provider'] 
       ], 
       columns: [ 
        response['columns'] 
       ] 
      }); */ 
      console.log(response); 

     } 


    }) 

} 

`

PHPコントローラのアクション:

public function actionSearch() { 
     $data = \Yii::$app->request->post('searchData'); 
     $tt; $svalue; 
     if(count($data) === 0) {throw new UserException('data is emptry');} 

     echo var_dump($data); 
    } 

そして、ここが問題だ、上記のコードは正常に動作します。しかし、私がecho $data私のカスタムUserException 'データが空です'しようとしているときに、私は通常期待していたPHPの '文字列として配列を渡そうとしている'の代わりにスローされます。これを引き起こしているのは何ですか?なぜpost()はこのように動作しますか?技術的な理由はありますか?

+0

'post()'はここでうまくいきます。あなたの問題はあなたの行動に渡すデータにあります。アクションの '$ _POST' @の下にあるものを確認するだけです。 – Yupik

答えて

0

ちょうどあなたがあなたのモデルを使用してフォームを作成するActiveFormを使用する必要があると名前が自動的にこれとは別に、あなたが大会ModelName[field_name]を含ん入力に割り当てられます

data:formId.serialize(), 

data: { 
      searchData: formId.serializeArray(), 
     }, 

を変更あなたのフォームは表示されていませんが、actionではがpost()の配列になっていますので、データが

[ 
    searchData=>[ 
    field_1=>value, 
    field_1=>value, 
    field_1=>value, 
    field_1=>value, 
    ] 
] 
関連する問題