首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >AJAX模式中的验证错误

AJAX模式中的验证错误
EN

Stack Overflow用户
提问于 2013-06-14 05:53:23
回答 8查看 74.8K关注 0票数 34

目前,我使用它通过ajax显示验证错误:

代码语言:javascript
复制
            if (data.validation_failed == 1)
            {
                var arr = data.errors;
                $.each(arr, function(index, value)
                {
                    if (value.length != 0)
                    {
                        $("#validation-errors").append('<div class="alert alert-error"><strong>'+ value +'</strong><div>');
                    }
                });
                $('#ajax-loading').hide();
                $("#validation-errors").show();
            }

它工作得很好,完全符合我的需要。

问题是我必须做些什么才能将错误从laravel传输到ajax:

代码语言:javascript
复制
    $rules = array( 
        'name'  => 'required',
        'password' => 'required'
    );

    $v = Validator::make(Input::all(), $rules);

    if ( ! $v->passes())
    {

    $messages = $v->messages();

    foreach ($rules as $key => $value)
    {
        $verrors[$key] = $messages->first($key);
    }

        if(Request::ajax())
        {                    
            $response_values = array(
                'validation_failed' => 1,
                'errors' => $verrors);              
        return Response::json($response_values);
        }
        else
        {
        return Redirect::to('login')
            ->with('validation_failed', 1)
            ->withErrors($v);
        }       

    }

如果我想让字段名作为键,我必须迭代$rules,但是即使我不使用字段名作为键,我也必须迭代错误消息来构造$verrors。

我如何在不需要迭代的情况下将$v->messages()转换为$verrors的等价物?因为Response::json()需要的是数组而不是对象。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2013-06-14 06:37:54

最简单的方法是利用验证器的MessageBag对象。这可以像这样完成:

代码语言:javascript
复制
// Setup the validator
$rules = array('username' => 'required|email', 'password' => 'required');
$validator = Validator::make(Input::all(), $rules);

// Validate the input and return correct response
if ($validator->fails())
{
    return Response::json(array(
        'success' => false,
        'errors' => $validator->getMessageBag()->toArray()

    ), 400); // 400 being the HTTP code for an invalid request.
}
return Response::json(array('success' => true), 200);

这将为您提供如下JSON响应:

代码语言:javascript
复制
{
    "success": false,
    "errors": {
        "username": [
            "The username field is required."
        ],
        "password": [
            "The password field is required."
        ]
    }
}
票数 86
EN

Stack Overflow用户

发布于 2014-02-09 10:16:28

在ajax响应中,尝试类似于

代码语言:javascript
复制
    .fail(function( data ) {
        var response = JSON.parse(data.responseText);
        var errorString = '<ul>';
        $.each( response.errors, function( key, value) {
            errorString += '<li>' + value + '</li>';
        });
        errorString += '</ul>';
票数 17
EN

Stack Overflow用户

发布于 2019-03-25 18:36:29

试试这段代码。它工作得很好:

代码语言:javascript
复制
$.ajaxSetup({
    headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}
});



$("#sendData").submit(function(e) 
{
    e.preventDefault();
    var formData  = new FormData(jQuery('#sendData')[0]);
    $.ajax({

       type:'POST',
       url:"/your(URL)",
       data:formData,
        contentType: false,
        processData: false,
       success:function(data)
       {
          alert(data);
       },
        error: function(xhr, status, error) 
        {

          $.each(xhr.responseJSON.errors, function (key, item) 
          {
            $("#errors").append("<li class='alert alert-danger'>"+item+"</li>")
          });

        }

    });

});

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17097797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档