2016-08-05 38 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']; 
    

    ,似乎它爲我的作品!

    對不起,我的英語..