2016-08-05 11 views
1

Am Gabe von Daten beim Zugriff auf yii2 Ajax-Anforderung verwenden, aber ich halte auf einen 500 Fehler bekommenFehler Post json Daten in yii2

Dies ist der 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); 
?> 

Wenn ich Konsole tun. log (Schlüssel) diese gibt

[0, 1] 

Dies ist mein Controller-Code:

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"; 
      } 

Das obige führt immer den Fehler Teil der Post-Anfrage, Was könnte falsch sein;

+0

fügen Sie JSON-codierte Zeichenfolge, die Sie dekodieren möchten. –

+0

Bitte schreiben Sie den genauen Code –

+0

Entschuldigung Schädel ich möchte die Werte von $ Schlüssel zu entschlüsseln –

Antwort

5

Sie senden Ihren JSON als codierten (Post-) Datenkörper, nicht als Schlüsselwertpaare. Deine Vorgehensweise funktioniert also nicht so.

Es gibt zwei Möglichkeiten, dieses Problem zu beheben:

  1. Umgestalten des Controllers in einen RESTful service
  2. in Ihrem Controller eher die JSON Körper verwenden als POST

Parameter Während die erste Option bevorzugt wird Auf lange Sicht ist die zweite Option ziemlich einfach als schnelle Lösung.

Als Erstes stellen Sie sicher, dass Sie Ihre App so konfiguriert haben, dass sie JSON body conten analysiert. IN config.php fügen Sie diese dem components Array:

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

Dann in Ihrem Controller verwenden diese die JSON-Parameter zu erhalten:

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

Danke ich musste es in Ruhe api Formular ändern –

+0

Große Antwort! Arbeitete für mich! –

1

ich ein Neuling bin .. Aber ich möchte auch checkboxcoloumns verwenden in Gridview (Kartik-Version). 1. Sache.

Statt zu schreiben

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

Ich habe

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

zweite Sache zu schreiben. In der Steuerung Sie die keylist verarbeiten kann, aber nicht versuchen, sie zu entschlüsseln, ist es einfach Verwendung int auf diese Weise:

 $keys = $_POST['keylist']; 

und es scheint, es funktioniert für mich!

Entschuldigung für mein Englisch.