laravel将错误信息发送到阿贾克斯后 [英] laravel adding error messages to ajax post

查看:128
本文介绍了laravel将错误信息发送到阿贾克斯后的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图做一个形式通过AJAX在laravel 5提交和它的作品到一定程度。

这是我的AJAX / jqery:

  $('#RegisterSubmit)。点击(函数(五){
        即preventDefault();
        变种形式= $('#RegisterForm');
            $阿贾克斯({
                键入:POST,
                网址:'/ register_process,
                数据:form.serialize(),
                数据类型:JSON,
                超时:9000,

            });
            $('#RegisterForm')[0] .reset段();

    });
 

一切工作正常,用户可以注册和信息将被发送到数据库中,但是当用户进行的错误,我想那里有一条消息说that.ex:用户名字段为空

我成功地做到这一点通过使用HTML这样的:

 < D​​IV CLASS =形组>
        <标签类=山口为=用户名和GT;用户名:​​LT; /标签>
     < D​​IV CLASS =山坳>
        <输入ID =用户名级=输入{{$错误 - >拥有(用户名)有错误:?''}}类型=用户名NAME =用户名值= {{输入::旧的('用户名')}}>< /输入>< BR>
        {! $错误 - >首先('用户名','<跨度风格=颜色:红色>:消息< / SPAN>')!}
     < / DIV>
    < / DIV>
 

但现在我不能用这个了,因为我送与阿贾克斯的数据,有什么我可以做些什么来解决这个问题?

这些是我如何显示消息:

 公共职能StoreRegister()
{
    $消息= [
        独一无二=> Acest:属性似曾相识exista',
        最小=> Câmpul:属性trebuie SAconţinaCEL普京:分caractere,
        '需要'=> Campul:属性trebuie completat',
        电子邮件=> Campul:属性trebuie SA外商投资企业有效
    ]。

    $验证=验证::彩妆(输入::所有的(),注册:: $规则,$邮件);
    如果(用$ validator->失败())
    {
        返回重定向::回() - > withInput() - > withErrors($验证);
    }

    注册:: saveFor​​mData(输入::除外(阵列('_令牌')));
    返回重定向::到('/');
}
 

解决方案

  $。阿贾克斯({
                    键入:POST,
                    网址:'/ register_process,
                    数据:form.serialize(),
                    数据类型:JSON,
                    超时:9000,
                    错误:功能(数据){
                        如果(data.status === 422){
                          VAR错误= data.responseJSON;
                          errorHtml ='< D​​IV CLASS =错误>< UL>';
                          $每个(错误,功能(键,值){
                               errorHtml + ='<李> +值[0] +'< /李>';
                         });
                          errorHtml + ='< / UL>< / DIV>';
                          $('#formerrors)。html的(errorHtml);

                    }
                 }
         });
 

在使用AJAX时验证,laravel生成包含每个错误消息和响应状态JSON效应初探是 422 。不要忘记添加一个div 用于显示错误。

 < D​​IV ID =formerrors>< / DIV>
 

I am trying to make a form to submit via ajax in laravel 5 and it works to a certain point.

This is my ajax/jqery:

$('#RegisterSubmit').click(function(e){
        e.preventDefault();
        var form = $('#RegisterForm');
            $.ajax({
                type: 'POST',
                url: '/register_process',
                data: form.serialize(),
                dataType: 'json',
                timeout: 9000,

            });
            $('#RegisterForm')[0].reset();

    });

Everything works fine, the user can register and informations are sent to database but when the user makes an error i want there to be a message saying that.ex: 'username field is empty'.

I managed to do that by using html like this:

<div class="form-group">
        <label class = "col" for = "username" >username:</label>
     <div class = "col">
        <input id = "username" class=" input {{ $errors->has('username') ? 'has-error' : '' }}" type = "username" name = "username" value="{{ Input::old('username') }}"></input><br>
        {!! $errors->first('username' , '<span style = "color:red">:message</span>') !!}
     </div>
    </div>

But now i can't use this anymore as i am sending data with ajax, what can i do to fix this ?

These is how i show messages:

    public function StoreRegister()
{
    $messages = [
        'unique' => 'Acest :attribute deja exista',
        'min' => 'Câmpul :attribute trebuie sa conţina cel puţin :min caractere',
        'required' => 'Campul :attribute trebuie completat',
        'email' => 'Campul :attribute trebuie sa fie valid'
    ];

    $validator = Validator::make(Input::all(),Register::$rules,$messages);
    if($validator->fails())
    {
        return Redirect::back()->withInput()->withErrors($validator);
    }

    Register::saveFormData(Input::except(array('_token')));
    return Redirect::to('/');
}

解决方案

$.ajax({
                    type: 'POST',
                    url: '/register_process',
                    data: form.serialize(),
                    dataType: 'json',
                    timeout: 9000,
                    error: function(data){
                        if( data.status === 422 ) {
                          var errors = data.responseJSON;
                          errorHtml='<div class="errors"><ul>';
                          $.each( errors, function( key, value ) {
                               errorHtml += '<li>' + value[0] + '</li>';
                         });
                          errorHtml += '</ul></div>';
                          $( '#formerrors' ).html( errorHtml );

                    }
                 }
         });

When using validate during ajax ,laravel generates json reponse containing each error messages and status of that response is 422.Do not forget to add a div for displaying errors.

<div id="formerrors"></div>

这篇关于laravel将错误信息发送到阿贾克斯后的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆