首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ajax中捕获laravel验证异常

在ajax中捕获laravel验证异常
EN

Stack Overflow用户
提问于 2020-12-23 21:42:26
回答 1查看 60关注 0票数 2

此api返回以下错误。如何处理ajax中的name.0和name.1等,并在表单中的相应输入下显示。

代码语言:javascript
复制
errors: {name.0: ["The name.0 has already been taken."], 
name.1: ["The name.1 has already been taken."]}

ajax:

代码语言:javascript
复制
$.ajax({
    type: "POST",
    url: basePath + "urlHere",
    data: form_data,
    success: function (data) {
        ..... .....
        ..... .....
    },
    error: function (jqXHR, textStatus, errorThrown) {
        var errors = $.parseJSON(jqXHR.responseText);
        console.log('errcheck',  errors.errors['name.0']); //1st input err
        console.log('errLength',  errors.errors.length); //undefined
        if (typeof errors.errors['name.0'] !== 'undefined') { //how to run a loop here?
            $('form#add-form').find('.error-message').each(function () {
                $(this).empty().hide();
            });
            $('form#add-form').find('.error-message').empty()
                .append('<i class="fa fa-info-circle"></i>' + errors.errors['name.0']);
            $('form#add-interest-type-form').find('.error-message').show();
        }
    },
    complete: function () {
        ...... .....
        ..... .....
    }
});

验证:

代码语言:javascript
复制
$request->validate([
    'group' => 'required',
    'name' => [
        'required', Rule::unique('group_tbl')->where(function ($query) use ($request){
            $query->where('group', $request->get('group')); 
        })
    ]
]);

查看:

代码语言:javascript
复制
<input name="group" placeholder="group here" required >
<input name="name[]" placeholder="name here" required >
<small class="error-message" id="title_err" style="display: none;"></small>
<input name="name[]" placeholder="name here" > //added by js but for simplicity added here manually
<small class="error-message" id="title_err" style="display: none;"></small>
EN

回答 1

Stack Overflow用户

发布于 2020-12-23 21:56:53

您希望使用jqXHR.responseJSON而不是jqXHR.responseText

错误回调的实现示例:

代码语言:javascript
复制
function (jqXHR, textStatus, errorThrown) {
    const data = jqXHR.responseJSON;

    let html = '';

    if (data.errors) {
        const errors = Object.values(data.errors).map(messages => messages[0]);
        html = errors.map(error => `<li>${error}</li>`);
    } else if (data.message) {
        html = `<li>${data.message}</li>`;
    }

    $("#title_err").html(`<ul>${html}</ul>`);
}

当然,您应该根据自己的需要进行更改。

顺便说一下:你在你的title_err代码中重复了两次HTML。您应该删除其中一个,因为id不能在一个页面中出现多次。

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

https://stackoverflow.com/questions/65425268

复制
相关文章

相似问题

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