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

我正在使用 ajax 请求将数据传递给 yii2,但我不断收到 500 错误

Am passing data to yii2 using ajax request but i keep on getting a 500 error

这是ajax请求代码:

This is the ajax request code:

<?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) 这会返回

When i do console.log(keys) this returns

[0, 1]

这是我的控制器代码:

if (Yii::$app->request->post()) {
         echo $post = json_encode($_POST['keys']);
          if (isset($_POST['keylist'])) {
                $keys = yiihelpersJson::decode($_POST['keylist']);
              print_r($keys);
            }else{
              echo "1";
          }

上面总是执行post请求的错误部分,可能有什么问题;

The above always executes the error part of post request, What could be wrong;

推荐答案

您将 JSON 作为编码(发布)数据体发送,而不是键值对.所以你的方法行不通.

You are sending your JSON as encoded (post) data body, not key value pairs. So your approach is not working this way.

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

There are two options to fix this:

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

虽然从长远来看第一个选项是首选,但第二个选项作为快速解决方案非常简单.

While the first option is preferred in the long run, the second option is pretty simple as a quick fix.

首先,确保您将应用配置为解析 JSON 正文内容.在 config.php 中添加这个到 components 数组:

First, make sure you configure your app to parse JSON body conten. IN config.php add this to the components array:

'request' => [
    'parsers' => [
        'application/json' => 'yiiwebJsonParser',
    ]
]

然后在您的控制器中使用它来获取 JSON 参数:

Then in your controller use this to get the JSON parameters:

$model->load(Yii::$app->getRequest()->getBodyParams());

相关文章