我尝试使用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()的行为如下?是否有技术原因?
答案 0 :(得分:0)
只需更改
data: {
searchData: formId.serializeArray(),
},
到
data:formId.serialize(),
您应该使用ActiveForm
来使用您的模型创建表单,并且名称将自动分配给包含约定ModelName[field_name]
的输入,除此之外您还没有显示您的表单,而是在您的{ {1}}您获得了action
数组中的searchData
,因此我假设您将数据发布为
post()