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

时间:2016-08-05 10:01:40

标签: php ajax yii2 yii2-advanced-app yii2-basic-app

使用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的错误部分,可能是错的;

2 个答案:

答案 0 :(得分:11)

您将JSON作为编码(post)数据正文发送,而不是键值对。所以你的方法不是这样的。

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

  1. 将您的控制器重构为RESTful service
  2. 控制器中的
  3. 使用JSON主体而不是POST参数
  4. 虽然从长远来看第一个选项是首选,但第二个选项非常简单,只需快速修复。

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

它似乎对我有用!

对不起我的英文..