0

我从 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"
)
4

3 回答 3

2

result.errors是一个只有一个元素的数组,即您要迭代的元素,$.each因此只需替换以下行:

$.each(result.errors, function(label, error) {

对于这个:

$.each(result.errors[0], function(label, error) {

那应该做你想做的事。

于 2012-11-29T08:54:59.233 回答
0

在您的 JSON 中,您的错误数组似乎只包含一个元素,该元素是具有属性的对象,请尝试使用:

$.each(result.errors[0], function(label, error) {
于 2012-11-29T08:55:39.843 回答
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");
于 2012-11-29T21:02:01.783 回答