Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 访问yii2中的post json数据时出错_Php_Ajax_Yii2_Yii2 Advanced App_Yii2 Basic App - Fatal编程技术网

Php 访问yii2中的post json数据时出错

Php 访问yii2中的post json数据时出错,php,ajax,yii2,yii2-advanced-app,yii2-basic-app,Php,Ajax,Yii2,Yii2 Advanced App,Yii2 Basic App,我使用ajax请求将数据传递给yii2,但我不断收到500个错误 这是ajax请求代码: <?php $script = <<< JS $('form#forward_pr').on('beforeSubmit', function(e){ var keys = $('#grid').yiiGridView('getSelectedRows'); $.post({ url: "forwardpr", // your cont

我使用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);
 ?>
这是我的控制器代码:

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

有两个选项可以解决此问题:

  • 将控制器重构为
  • 在控制器中,使用JSON主体而不是POST参数
  • 从长远来看,第一个选项是首选的,而第二个选项作为一个快速解决方案非常简单

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

    'request' => [
        'parsers' => [
            'application/json' => 'yii\web\JsonParser',
        ]
    ]
    
    然后在控制器中,使用以下命令获取JSON参数:

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

    我是个新手。。但我也希望在gridview(Kartik版本)中使用CheckBoxColumns。 第一件事

    而不是写作

    var keys = $('#grid').yiiGridView('getSelectedRows');
    
    我得写信

    var keys = $('#w4').yiiGridView('getSelectedRows');
    
    第二件事。 在控制器中,您可以处理密钥列表,但不要尝试对其进行解码,只需按以下方式使用它:

            $keys = $_POST['keylist'];
    
    而且它似乎对我有效


    对不起,我的英语

    添加您要解码的json编码字符串。请发布准确的代码。对不起,我想解码$keysTry的值以更改ajax url,如控制器/方法,请再试一次。谢谢,我不得不将其更改为rest api格式,回答得很好!!为我工作!
            $keys = $_POST['keylist'];