ajax发布数据未读取yii2

时间:2017-12-07 21:03:24

标签: php jquery ajax yii2

我尝试使用Yii :: $ app-> request-> post()在控制器操作中读取通过AJAX发布的$ _POST数组,但是发生了一些奇怪的事情。

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()的行为如下?是否有技术原因?

1 个答案:

答案 0 :(得分:0)

只需更改

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

 data:formId.serialize(),

您应该使用ActiveForm来使用您的模型创建表单,并且名称将自动分配给包含约定ModelName[field_name]的输入,除此之外您还没有显示您的表单,而是在您的{ {1}}您获得了action数组中的searchData,因此我假设您将数据发布为

post()