0

我使用 Laravel 4 作为后端(尽管我认为这不一定会导致问题),并且正在尝试进行一些 AJAX 验证(以保留动态填充的下拉菜单)。

首先,我用来调用 AJAX 请求的代码:

$('#add_character_submit').click(function(e) {
    e.preventDefault();
    $.ajax({
        url: '{{ URL::route("addcharactercheck") }}',
        type: 'POST',
        dataType: 'json',
        data: {
            'name': $('#name').val().replace('/[^a-zA-Z0-9\s\-\(\)\.\,]+/', ''),
            'gender': $('#gender').val().replace('/[^0-9]+/', ''),
            'server': $('#server').val().replace('/[^0-9]+/', ''),
            'faction': $('#faction').val().replace('/[^0-9]+/', ''),
            'race': $('#race').val().replace('/[^0-9]+/', ''),
            'class': $('#class').val().replace('/[^0-9]+/', ''),
            'path': $('#path').val().replace('/[^0-9]+/', '')
        }
    }).done(function(response) {
        console.log(response);
    }).fail(function(response) {
        console.log(response.errors);
    });
});

然后这是我得到的回应:

{"success":false,"errors":{"name":["Please pick a name"],"server":["Please pick a server"],"faction":["Please pick a faction"],"race":["Please pick a race"],"class":["Please pick a class"],"path":["Please pick a path"]}}

如果我将它放入 JSON 验证器,它会说它通过了。

我正在返回响应,就像Content-Type: application/jsondataType: 'json'在上面的 AJAX 请求中一样,但是试图console.log(response.errors)导致undefined.

我也尝试过$.parseJSON在响应上使用,但是会出现unexpected character类型错误(请注意,这只是为了仔细检查)。

如果我在控制台中键入以下内容:

var x = {"success":false,"errors":{"name":["That name is not available"],"faction":["Please pick a faction"],"race":["Please pick a race"],"class":["Please pick a class"],"path":["Please pick a path"]}}
console.log(x.errors);

然后它在控制台中正确输出错误。

尽管在 SO 上搜索了十几个类似的问题,但它们似乎都建议接受上述一个或两个的答案 - 我找不到任何不同的尝试。

4

1 回答 1

1

正确答案已在评论中确定:

在 上.fail,jQuery 返回一个 jqXHR 对象,而不是数据。您要查找的数据在responseText此对象的属性中。

.fail(function(jqXHR) {
    var json = $.parseJSON(jqXHR.responseText);
    console.log(json);
});
于 2013-08-25T22:08:54.010 回答