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

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – Yii2:如何使用AJAX验证表单,然后再次使用AJAX提交数据脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我无法在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(){…});

脚本宝典总结

以上是脚本宝典为你收集整理的php – Yii2:如何使用AJAX验证表单,然后再次使用AJAX提交数据全部内容,希望文章能够帮你解决php – Yii2:如何使用AJAX验证表单,然后再次使用AJAX提交数据所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。