yii2访问postjson数据出错
Error in accessing post json data in yii2
正在使用 ajax 请求将数据传递给 yii2,但我一直收到 500 错误
这是ajax请求代码:
<?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);
?>
当我console.log(键)这个returns
[0, 1]
这是我的控制器代码:
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) 数据主体,而不是键值对。所以你的方法是行不通的。
有两个选项可以解决此问题:
- 将您的控制器重构为 RESTful service
- 在你的控制器中使用 JSON 主体而不是 POST 参数
虽然第一个选项在较长 运行 中是首选,但第二个选项作为快速修复非常简单。
首先,确保将应用配置为解析 JSON 正文内容。
IN config.php
将此添加到 components
数组:
'request' => [
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
]
然后在您的控制器中使用它来获取 JSON 参数:
$model->load(Yii::$app->getRequest()->getBodyParams());
我是新手.. 但我也想在 gridview(Kartik 版本)中使用 checkboxcoloumns。
第一件事。
而不是写
var keys = $('#grid').yiiGridView('getSelectedRows');
我得写
var keys = $('#w4').yiiGridView('getSelectedRows');
第二件事。
在控制器中,您可以处理密钥列表,但不要尝试对其进行解码,以这种方式简单地使用它:
$keys = $_POST['keylist'];
似乎对我有用!
对不起我的英语..
正在使用 ajax 请求将数据传递给 yii2,但我一直收到 500 错误
这是ajax请求代码:
<?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);
?>
当我console.log(键)这个returns
[0, 1]
这是我的控制器代码:
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) 数据主体,而不是键值对。所以你的方法是行不通的。
有两个选项可以解决此问题:
- 将您的控制器重构为 RESTful service
- 在你的控制器中使用 JSON 主体而不是 POST 参数
虽然第一个选项在较长 运行 中是首选,但第二个选项作为快速修复非常简单。
首先,确保将应用配置为解析 JSON 正文内容。
IN config.php
将此添加到 components
数组:
'request' => [
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
]
然后在您的控制器中使用它来获取 JSON 参数:
$model->load(Yii::$app->getRequest()->getBodyParams());
我是新手.. 但我也想在 gridview(Kartik 版本)中使用 checkboxcoloumns。 第一件事。
而不是写
var keys = $('#grid').yiiGridView('getSelectedRows');
我得写
var keys = $('#w4').yiiGridView('getSelectedRows');
第二件事。 在控制器中,您可以处理密钥列表,但不要尝试对其进行解码,以这种方式简单地使用它:
$keys = $_POST['keylist'];
似乎对我有用!
对不起我的英语..