我使用 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/json
我dataType: '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 上搜索了十几个类似的问题,但它们似乎都建议接受上述一个或两个的答案 - 我找不到任何不同的尝试。