在yii2中访问发布json数据时出错 [英] Error in accessing post json data in yii2

查看:110
本文介绍了在yii2中访问发布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 = \yii\helpers\Json::decode($_POST['keylist']);
              print_r($keys);
            }else{
              echo "1";
          }

上面的代码总是执行发布请求的错误部分,这可能是什么错误;

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' => 'yii\web\JsonParser',
    ]
]

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

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

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

这篇关于在yii2中访问发布json数据时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆