我得到了php的回复:
{"success":false,"errors":{"category_id":"category id must not be empty","name":"name must not be empty","uri":"uri must not be empty","price":"price must not be empty","status":"status must not be empty"}}
并想要显示错误:
form.submit(function(ev) {
ev.preventDefault();
$('.help-inline').remove();
var data = $(this).serialize();
$.post($(this).attr('action'), {'data': data}, function(result) {
if (result.success == true) {
console.log('true');
} else {
$.each(result.errors, function(label, error) {
console.log(label+' '+error);
});
}
});
});
但它引发了我TypeError: e is undefined
在旧版本上它可以工作,但在1.8.3上则没有。 我做错了什么?
我的PHP代码是:
$errors = $post->errors('');
$this->response->body(json_encode(array(
'success' => FALSE,
'errors' => $errors,
)));
$ errors是关联数组:
array(5) (
"category_id" => string(29) "category id must not be empty"
"name" => string(22) "name must not be empty"
"uri" => string(21) "uri must not be empty"
"price" => string(23) "price must not be empty"
"status" => string(24) "status must not be empty"
)
答案 0 :(得分:2)
您的result.errors
是一个只包含一个元素的数组,您希望使用$.each
进行迭代,所以只需替换以下行:
$.each(result.errors, function(label, error) {
这个:
$.each(result.errors[0], function(label, error) {
应该做你想做的事。
答案 1 :(得分:0)
在您的JSON中,您的errors数组似乎只包含一个元素,它是一个具有属性的对象,请尝试使用:
$.each(result.errors[0], function(label, error) {
答案 2 :(得分:0)
PHP和响应似乎没问题,但我不知道你会在哪里说javascript你会使用json数据类型。您可以在使用console.log(result)代码时验证。并查看您的结果是对象还是字符串。如
form.submit(function(ev) {
ev.preventDefault();
$('.help-inline').remove();
var data = $(this).serialize();
$.post($(this).attr('action'), {'data': data}, function(result) {
console.log('Result is: ' + typeof(result));
if (result.success === true) {
console.log('true');
} else {
$.each(result.errors, function(label, error) {
console.log(label+' '+error);
});
}
});
}, "json");