Php 访问yii2中的post json数据时出错
我使用ajax请求将数据传递给yii2,但我不断收到500个错误 这是ajax请求代码:Php 访问yii2中的post json数据时出错,php,ajax,yii2,yii2-advanced-app,yii2-basic-app,Php,Ajax,Yii2,Yii2 Advanced App,Yii2 Basic App,我使用ajax请求将数据传递给yii2,但我不断收到500个错误 这是ajax请求代码: <?php $script = <<< JS $('form#forward_pr').on('beforeSubmit', function(e){ var keys = $('#grid').yiiGridView('getSelectedRows'); $.post({ url: "forwardpr", // your cont
<?php
$script = <<< JS
$('form#forward_pr').on('beforeSubmit', function(e){
var keys = $('#grid').yiiGridView('getSelectedRows');
$.post({
url: "forwardpr", // your controller action
dataType: 'json',
data: {keylist: keys},
success: function(data) {
alert('I did it! Processed checked rows.')
},
error: function(err){
console.log("server error");
}
});
return false;
} ) ;
JS;
$this->registerJS($script);
?>
这是我的控制器代码:
if (Yii::$app->request->post()) {
echo $post = json_encode($_POST['keys']);
if (isset($_POST['keylist'])) {
$keys = \yii\helpers\Json::decode($_POST['keylist']);
print_r($keys);
}else{
echo "1";
}
上面总是执行post请求的错误部分,可能有什么错误 您将JSON作为编码(post)数据体发送,而不是键值对。所以你的方法不是这样的 有两个选项可以解决此问题:
config.php
中,将其添加到components
数组中:
'request' => [
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
]
然后在控制器中,使用以下命令获取JSON参数:
$model->load(Yii::$app->getRequest()->getBodyParams());
我是个新手。。但我也希望在gridview(Kartik版本)中使用CheckBoxColumns。 第一件事 而不是写作
var keys = $('#grid').yiiGridView('getSelectedRows');
我得写信
var keys = $('#w4').yiiGridView('getSelectedRows');
第二件事。
在控制器中,您可以处理密钥列表,但不要尝试对其进行解码,只需按以下方式使用它:
$keys = $_POST['keylist'];
而且它似乎对我有效
对不起,我的英语 添加您要解码的json编码字符串。请发布准确的代码。对不起,我想解码$keysTry的值以更改ajax url,如控制器/方法,请再试一次。谢谢,我不得不将其更改为rest api格式,回答得很好!!为我工作!
$keys = $_POST['keylist'];