我有GirdView
,其中包含checkbox
。现在我有一个按钮,我将其路由到另一个action controller
。以下是我的代码
<?= GridView::widget([
'dataProvider' => $dataProvider,
/*'filterModel' => $searchModel,*/
'id'=>'grid',
'columns' => [
['class' => 'yii\grid\CheckboxColumn'],
'Meter Serial Number',
'Issued To',
'Store',
],
]); ?>
<a href="<?= URL::toRoute(['ogpheader/viewsetpdf','id'=>'myid'])?>" type="submit" class="btn btn-primary" name="issue_pdf" id="myid" onclick="getRows()">Set PDF</a>
$(document).ready(function () {
$('#myid').click(function() {
var keys = $('#grid').yiiGridView('getSelectedRows');
// alert(keys);
$.post({
url: 'ogpheader/viewsetpdf',
dataType: 'json',
data:{keylist: keys},
success:function(data) {
alert('Done')
}
});
}) });
然后在我的控制器中
public function actionViewsetpdf()
{
/*$model = $this->findModel($id);
print_r($model);*/
if(isset($_POST['keylist']))
{
$keys = json_decode($_POST['keylist']);
print_r($keys);
}
exit();
}
当我点击按钮时,我得到空视图。我跟着this tutorial我不知道是什么问题。我坚持下去。
UPDATE1
在网络中检查
更新2
正如我所建议的那样$.ajax
尝试了以下结果
更新3
更改JS
$('#myid').click(function(e) {
e.preventDefault();
var keys = $('#grid').yiiGridView('getSelectedRows');
// alert(keys);
$.ajax({
url: '<?= URL::toRoute(["ogpheader/viewsetpdf"])?>',
dataType: 'json',
data:{keylist: keys},
type: 'post',
success:function(data) {
alert('Done')
}
});
结果是
任何帮助都将受到高度赞赏。
答案 0 :(得分:2)
POST方法需要csrf标记,因此您必须将_csrf标记作为参数传递
$.ajax({
url: 'ogpheader/viewsetpdf',
type: 'post',
dataType: 'json',
data: {
keylist: keys,
_csrf: '<?=Yii::$app->request->getCsrfToken()?>'
},
success: function(data) {
console.log(data);
}
});
或者您可以通过将其添加到控制器来禁用csrf valdation
public function beforeAction()
{
if ($this->action->id == 'viewsetpdf') {
Yii::$app->controller->enableCsrfValidation = false;
}
return true;
}
或者最简单的方法就是将POST更改为GET
答案 1 :(得分:2)
更改控制器并查看返回值,可能是csrf令牌缺少您输出为空的原因
public function actionViewsetpdf()
{
if(isset($_POST['keylist']))
{
$keys = json_decode($_POST['keylist']);
print_r($keys);
}
else{
echo 'no data';
}
exit();
}
答案 2 :(得分:1)
$.post()
的参数有限。使用$.ajax()
。您还需要添加e.preventDefault()
以停止从a
代码
$(document).ready(function () {
$('#myid').click(function(e) {
e.preventDefault();
var keys = $('#grid').yiiGridView('getSelectedRows');
// alert(keys);
$.ajax({
url: '<?php echo URL::toRoute(["ogpheader/viewsetpdf"]); ?>',
dataType: 'json',
data:{keylist: keys},
type: 'post',
success:function(data) {
alert('Done')
}
});
}) });
答案 3 :(得分:0)
使用以下js
<?php
$url = Url::toRoute(['ogpheader/viewsetpdf']);
$this->registerJs(<<< JS
$(document).ready(function () {
$('#myid').click(function() {
var keys = $('#grid').yiiGridView('getSelectedRows');
$.ajax({
url: '$url',
data: {keylist: keys},
type: "POST",
dataType: 'json',
success:function(data) {
alert('Done');
}
});
});
});
JS
); ?>