我正在尝试更新两个字段,但由于某种原因,更新无法正常工作。 这是方法:
public function actionChangepassword()
{
$model = $this->findModel(Yii::$app->user->identity->id);
$model->scenario = 'changepassword';
if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())):
Yii::$app->response->format = Response::FORMAT_JSON;
if(ActiveForm::validate($model))
return ActiveForm::validate($model);
$model->salt = Yii::$app->security->generateRandomString(32);
$model->password = Yii::$app->security->generatePasswordHash($model->salt . $model->password_new);
$model->update();
return 'true';
endif;
return $this->renderAjax('changePassword',
[ 'model' => $model]
);
}
和JS功能:
$('body').on('beforeSubmit', '#changePassword', function(event, jqXHR, settings) {
var form = $(this);
if(form.find('.has-error').length) {
return false;
}
$.ajax({
url: form.attr('action'),
type: 'post',
data: form.serialize(),
success: function(data) {
// do something ...
}
});
return false;
});
结果是 true ,这意味着它自己正在运行的功能,但密码和盐没有更新(我尝试使用 $ model-> save() ,但结果是一样的)。我做错了什么?
答案 0 :(得分:1)
可能是因为这两行:
if(ActiveForm::validate($model))
return ActiveForm::validate($model);
在这里你要检查模型数据是否有效,当它有效时你只需返回 true ,也许你的意思是
//the ! sign is missed
if( ! ActiveForm::validate($model))
并在模型数据无效时返回。另请查看return 'true';
返回字符串' true'而不是布尔 true
答案 1 :(得分:0)
首先,如果要使用带有JSON的ajax请求,则需要添加选项
$.ajax({
...
dataType: 'json',
...
});
其次,我们仍然需要JSON数据
return ActiveForm::validate($model); // returns boolean
return 'true'; // returns string
你需要JSON,
return \yii\helpers\Json::encode([
'success' => true // or something
]);
第三,我认为你的意思
if(!ActiveForm::validate($model))
return false;