我是yii2的新手。当我单击按钮时,jquery触发向控制器发送ajax请求的事件。这是代码:
$("#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);
}
});
});
在Mockup类的控制器创建实例
中 public function actionCreateMockup()
{
if (Yii::$app->request->isAjax)
{
$create_model = new Mockup();
//filling $create_model
return $this->redirect(Url::to(['site/saved-mockups']));
}
}
当我删除$ create_model = new Mockup(); //填充$ create_model,然后就可以了。 Mockup.php:
<?php
namespace app\models;
use yii\base\Model;
use yii\db\ActiveRecord;
class Mockup extends ActiveRecord
{
}
?>
答案 0 :(得分:2)
由于您使用ajax提交表单并希望在ajax success
回调中得到回复,因此您可以继续使用JavaScript来处理其他方案,并在保存提交的数据后重定向用户。
这是让你前进的事情
$("#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
}
}
});
});
比你的控制器
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();
];
}
}
}