2017-11-14 3 views
0

Ich bin neu in yii2. Wenn ich auf die Schaltfläche klicke, löst jquery ein Ereignis aus, das eine Ajax-Anfrage an den Controller sendet. Hier Code:

$("#save").on('click', function() { 
     var data = 'test'; 
     $.ajax({ 
      url: 'index.php?r=site%2Fcreate-mockup', 
      type: 'POST', 
      data: {dat: data}, 
      success: function(data) { 
       console.log(data); 
      } 
     }); 
    }); 

In Controller creats Instanz Mockup Klasse

public function actionCreateMockup() 
    { 
     if (Yii::$app->request->isAjax) 
     { 
      $create_model = new Mockup(); 
      //filling $create_model 
      return $this->redirect(Url::to(['site/saved-mockups'])); 
     } 
    } 

wenn ich $ create_model = new Mockup() löschen; // fülle $ create_model, dann ist es Arbeit. Mockup.php:

<?php 
namespace app\models; 
use yii\base\Model; 
use yii\db\ActiveRecord; 

class Mockup extends ActiveRecord 
{ 

} 

?> 
+0

Und was es gemeinsam mit Laravel hat? Ich habe das Laravel-Tag entfernt –

Antwort

2

Da Sie Ajax verwenden, um Ihre Form zu stellen und eine Antwort zurück in Ihre Ajax success Rückruf erwarten Sie könnten nur JavaScript weiterhin mit dem Rest der Szenarien zu behandeln und den Benutzer, sobald die umleiten Daten eingereicht wird gespeichert.

hier etwas um Sie gehen

$("#save").on('click', function() { 
    var data = 'test'; 
    $.ajax({ 
     url: 'index.php?r=site%2Fcreate-mockup', 
     type: 'POST', 
     data: {dat: data}, 
     dataType: 'JSON', 
     success: function(response) { 
      if(response.success){ 
        window.location = response.route //redirect on success 
      }else{ 
       //handle errors here 
      } 
     } 
    }); 
}); 

als in Ihrem Controller

public function actionCreateMockup() 
    { 
     if (Yii::$app->request->isAjax) 
     { 
      $create_model = new Mockup(); 
      //filling $create_model 
      \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; 
      if($create_model->load(\Yii::$app->getRequest()->post()) && $create_model->save()){ 
      return [ 
       'success'=> true, 
       'route'=> Url::to(['site/saved-mockups']) 
      ]; 
      }else{ 
      return [ 
       'success'=> false, 
       'errors'=> $create_model->getErrros(); 
      ]; 
     } 
     } 
    }