【问题标题】:Laravel Form Validation using Ajax and Bootstrap Modal issue使用 Ajax 和 Bootstrap 模态问题的 Laravel 表单验证
【发布时间】:2015-07-04 00:42:28
【问题描述】:

我有允许用户更新密码的引导模式:

    <div class="modal fade" id="settingModal">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                <h4 class="modal-title">Change Password</h4>
            </div>
            {!! Form::open(array('url' => '/users/updatePassword', 'method' => 'POST', 'id'=>'passUpdate')) !!}
            <div class="modal-body">
                @if(Session::has('error'))
                    <div class="alert-box success">
                        <h2>{{ Session::get('error') }}</h2>
                    </div>
                @endif

                <div id="password-group" class="form-group has-feedback @if ($errors->has('password')) has-error @endif">
                    {!! Form::password('password', array('id'=>'password', 'class' => 'text input form-control', 'placeholder'=>'New Password')) !!}
                    <span class="glyphicon glyphicon-lock form-control-feedback @if ($errors->has('password')) has-error @endif"></span>
                    @if ($errors->has('password')) <p class="help-block">{{ $errors->first('password') }}</p> @endif
                    <div id ="password_error"></div>
                </div>

                <div id="password_confirmation-group" class="form-group has-feedback @if ($errors->has('password_confirmation')) has-error @endif">
                    {!! Form::password('password_confirmation', array('id'=>'password_confirmation', 'class' => 'text input form-control', 'placeholder'=>'Confirm New Password')) !!}
                    <span class="glyphicon glyphicon-lock form-control-feedback @if ($errors->has('password_confirmation')) has-error @endif"></span>
                    @if ($errors->has('password_confirmation')) <p class="help-block">{{ $errors->first('password_confirmation') }}</p> @endif
                    <div id ="password_confirm_error"></div>
                </div>
            </div>

            <div class="modal-footer clearfix">
                <button type="button" class=" pull-left btn btn-default btn-flat" data-dismiss="modal">Close</button>
                {!! Form::submit('Submit', array('class'=>' pull-right btn btn-primary btn-flat'))!!}
            </div>
            {!! Form::close()!!}

        </div><!-- /.modal-content -->
    </div><!-- /.modal-dialog -->
</div><!-- /.modal -->

这是我的 JS 代码:

<script type="text/javascript">

$('#passUpdate').submit(function(e){
    var $form = $(this);

    e.preventDefault(); //keeps the form from behaving like a normal (non-ajax) html form
    var url = $form.attr('action');
    var formData = {};
    //submit a POST request with the form data
    $form.find(':input').each(function()
    {
        formData[ $(this).attr('name') ] = $(this).val();
        console.log($(this).val());
    });
    console.log('Before Submit');
    //submits an array of key-value pairs to the form's action URL
    $.post(url, formData, function(response) {
        //handle successful validation
        console.log("Success");
    }).fail(function(response) {
        //handle failed validation
        console.log("Failed");
        associate_errors(response['errors'], $form);
    });

});

function associate_errors(errors, $form)
{
    //remove existing error classes and error messages from form groups
    $form.find('.form-group').removeClass('has-errors').find('.help-text').text('');
    errors.foreach(function(value, index)
    {
        //find each form group, which is given a unique id based on the form field's name
        var $group = $form.find('#' + index + '-group');

        //add the error class and set the error text
        $group.addClass('has-errors').find('.help-text').text(value);
    }
}

这是我的 laravel 控制器的一部分:

    $validator = Validator::make($data, $rules);
    if ($validator->fails()){
        // If validation fails redirect back to login.
        return Response::json(array(
            'fail' => true,
            'errors' => $validator->getMessageBag()->toArray()
        ));
    }

所以我遇到了这个问题:

  • 在萤火虫控制台我得到:SyntaxError: missing ) after argument list } : in last line of JS code
  • 另外,我的 JS 函数 $('#passUpdate').submit 永远不会被调用。

NB Laravel 正确返回 JSON 响应。

更新我已经修复了问题的第一部分,现在我的表单已提交并收到 JSON 响应,但表单验证不起作用,错误未显示在模式上。

【问题讨论】:

    标签: javascript jquery ajax twitter-bootstrap laravel


    【解决方案1】:

    您错过了foreach 中的)

    function associate_errors(errors, $form) {
        //remove existing error classes and error messages from form groups
        $form.find('.form-group').removeClass('has-errors').find('.help-text').text('');
        errors.foreach(function (value, index) {
            //find each form group, which is given a unique id based on the form field's name
            var $group = $form.find('#' + index + '-group');
    
            //add the error class and set the error text
            $group.addClass('has-errors').find('.help-text').text(value);
        });
    }
    

    注意上面的倒数第二行。

    });

    【讨论】:

    • 是的,谢谢,这解决了第一部分,但它仍然在空白页面中打印 JSON 响应,而不是在模态中显示错误
    • submit() 被调用了吗?
    • 是的被称为 我在这里是打印的 我也添加了 e 像这个函数(e
    • 尝试在post成功回调中打印response
    • Console.log 中的失败和成功块不打印
    猜你喜欢
    • 2023-04-02
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 2016-11-04
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    相关资源
    最近更新 更多