繁体   English   中英

在yii2中访问post json数据时出错

[英]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(keys)时返回

[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)数据体发送,而不是键值对。 所以你的方法不是这样的。

有两种方法可以解决这个问题:

  1. 将您的控制器重构为RESTful服务
  2. 在您的控制器中使用JSON主体而不是POST参数

虽然从长远来看第一个选项是首选,但第二个选项作为快速修复非常简单。

首先,确保将应用配置为解析JSON body conten。 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'];

它似乎对我有用!

对不起我的英语不好..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM