2016-08-05 77 views
1

想过去的数据访问后JSON数据yii2使用Ajax请求,但我一直得到一个500错误错误在yii2

这是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); 
?> 

当我做控制台。日志(键)这将返回

[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请求的错误部分,有什么可能是错误的;

+0

添加json编码的字符串,你想解码。 –

+0

请发表确切代码 –

+0

抱歉头骨我想解码$ keys的值 –

回答

5

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

有两个选项来解决这个:

  1. 重构你的控制器到您的控制器使用JSON的身体,而不是POST参数

一个RESTful service

  • 虽然第一选择是优选从长远来看,第二个选项非常简单,可以快速修复。

    首先,确保您配置您的应用程序来解析JSON正文内容。 IN config.php它添加到components阵列:

    'request' => [ 
        'parsers' => [ 
         'application/json' => 'yii\web\JsonParser', 
        ] 
    ] 
    

    然后在你的控制器使用该工具来获取JSON参数:

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

    谢谢,我不得不改变它休息api形式 –

    +0

    伟大的答案!为我工作! –

    1

    我是一个新手。但我也想用checkboxcoloumns在gridview(Kartik版本)。 第一件事。

    而是写作

    var keys = $('#grid').yiiGridView('getSelectedRows'); 
    

    我必须写

    var keys = $('#w4').yiiGridView('getSelectedRows'); 
    

    第二件事。 在您可以处理密钥列表,但不要试图对其进行解码控制器,简单的使用它诠释这样:

     $keys = $_POST['keylist']; 
    

    ,似乎它为我的作品!

    对不起,我的英语..