使用ajax请求将数据传递给yii2,但我一直收到500错误
这是ajax请求代码:
lines = ['/home//Desktop/3A5F.py', 'path/sth/R67G.py', 'a/b/c/d/t/6UY7.py']
result = [l.split('/')[-1] for l in lines]
print result
# ['3A5F.py', 'R67G.py', '6UY7.py']
当我执行console.log(keys)时,返回
<?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);
?>
这是我的控制器代码:
[0, 1]
上面总是执行post request的错误部分,可能是错的;
答案 0 :(得分:11)
您将JSON作为编码(post)数据正文发送,而不是键值对。所以你的方法不是这样的。
有两种方法可以解决这个问题:
虽然从长远来看第一个选项是首选,但第二个选项非常简单,只需快速修复。
首先,确保将应用配置为解析JSON body conten。
IN config.php
将其添加到components
数组:
'request' => [
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
]
然后在你的控制器中使用它来获取JSON参数:
$model->load(Yii::$app->getRequest()->getBodyParams());
答案 1 :(得分:1)
我是新手..但我也想在gridview(Kartik版本)中使用checkboxcoloumns。 第一件事。
而不是写
var keys = $('#grid').yiiGridView('getSelectedRows');
我必须写
var keys = $('#w4').yiiGridView('getSelectedRows');
第二件事。
在控制器中你可以处理密钥列表,但不要尝试解码它,简单地用这种方式:
$keys = $_POST['keylist'];
它似乎对我有用!
对不起我的英文..