2017-11-11 280 views
-1

我有一个GirdView其中包括checkbox。现在我有一个按钮,我发送到另一个action controller。下面是我的代码无法从yii2中的ajax调用得到响应

<?= 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

尽管在网络检查它

Network Image

更新2

如所建议的我试图与$.ajax和下面是结果

Resulted image

更新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') 
    } 

});

结果是

Console Image

任何帮助将高度赞赏。

+0

你在网络调试呢?试着用$就 –

+0

@ PrasannaVenkatesh亲切看到更新 –

+0

您的$ .post应改为$ .ajax –

回答

2

改变控制器,看看有什么回报,可能CSRF令牌缺少为什么会得到空的输出

public function actionViewsetpdf() 
{ 
    if(isset($_POST['keylist'])) 
    { 
     $keys = json_decode($_POST['keylist']); 
     print_r($keys); 
    } 
    else{ 
     echo 'no data'; 
    } 
    exit(); 
} 
+0

它显示'no data' –

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') 
     } 

}); 
}) }); 
+0

尝试,但仍然是相同的结果。该页面是空的 –

+0

检查更新@MrFaisal –

+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

+0

它不工作 –

+0

我怀疑,你有没有尝试过他们,有什么错误返回 –

+0

如果添加此'beforeAction'方法 –

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 
); ?> 
+0

尝试了您的代码。但是,我又得到了空白页面 –