加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Yii2:如何使用AJAX验证表单,然后再次使用AJAX提交数据

发布时间:2020-12-13 16:56:48 所属栏目:PHP教程 来源:网络整理
导读:我无法在Yii2中找到以下方法: 首先通过AJAX验证我的表单,因为我有一个UNIQUE字段. 然后,如果验证正确,则通过AJAX将表单数据提交给表单操作. 这是我到目前为止所得到的: 在我看来: ?php $form = ActiveForm::begin([ 'id' = 'subscribe-form','action' = [
我无法在Yii2中找到以下方法:

>首先通过AJAX验证我的表单,因为我有一个UNIQUE字段.
>然后,如果验证正确,则通过AJAX将表单数据提交给表单操作.

这是我到目前为止所得到的:

在我看来:

<?php
        $form = ActiveForm::begin([
            'id' => 'subscribe-form','action' => ['site/subscribe'],'validationUrl' => ['site/validate-subscribe'],'validateOnSubmit' => true,'enableAjaxValidation' => true,]) ?>
        <?= $form->field($model,'name')->input('text',['class' => 'w-input']) ?>
        <?= $form->field($model,'email')->input('text',['class' => 'w-input']) ?>

        <div class="form-group">
            <?= Html::submitButton('SUSCRIBIRSE',['class' => 'w-inline-block btn','name' => 'login-button']) ?>
        </div>
        <?php ActiveForm::end() ?>

在我的控制器中:

public function actionValidateSubscribe(){
    if (Yii::$app->request->isAjax) {
        Yii::$app->response->format = Response::FORMAT_JSON;

        $model = new Subscription(Yii::$app->getRequest()->getBodyParams()['Subscription']);

        if (!$model->validate()) {
            return ActiveForm::validate($model);
        }
    }
}

public function actionSubscribe()
{

    if (Yii::$app->request->isAjax) {
        Yii::$app->response->format = Response::FORMAT_JSON;

        $model = new Subscription(Yii::$app->getRequest()->getBodyParams()['Subscription']);

        if(!$model->validate()){
            throw new NotAcceptableHttpException('Tiene errores de validación en la forma');
        }



        if($model->save()){
            Yii::$app->mailer->compose('subscription',['model'=>$model])
                ->setTo([$model->name => $model->email])
                ->setFrom(['Test' => 'info@test.com'])
                ->setSubject('Por favor confirme su suscripción')
                ->send();
        }

        $response = [
            'data'=>$model->getAttributes(),'success'=>'true'
        ];
        return $response;
    }
}

在我的JS中:

$(document).ready(function () {
$('body').on('beforeSubmit','form#subscribe-form',function () {
    var form = $(this);
    // return false if form still have some validation errors
    if (form.find('.has-error').length) {
        return false;
    }

    // submit form
    $.ajax({
        url    : form.attr('action'),type   : 'post',data   : form.serialize(),success: function (response) {
            // do something with response
        },error  : function () {

        }
    });
    return false;
});
});

问题是当我在ActiveForm中将“enableAjaxValidation”设置为true时,yii.ActiveForm.js没有触发afterVAlidate或beforeSubmit事件.

解决方法

尝试$(‘form#subscribe-form’).on(‘beforeSubmit’,function(){…});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读