如何在AJAX请求中访问JSON对象的子数组键

时间:2013-10-01 09:04:43

标签: javascript php jquery ajax json

我有一个用户表单,它进行AJAX调用,返回一个JSON对象供我操作,具体取决于用户输入的内容。 当存在错误时(用户未在输入字段中放置任何内容),输入框名称将与错误消息一起返回并存储在errors数组中,然后在JSON对象中返回。这是因为我将使用输入框名称,使用jQuery在DOM中找到它们,并在有错误的输入框后放置带有错误消息的span。 我遇到的问题是当我遍历JSON对象中返回的错误时,它不允许我访问错误的键(输入名称),只访问数组位置(0,1,2,3,4等) )。 我可以在JSON / jQuery对象中访问关联数组键,还是在某个地方出错?

这是我的代码(我只包含了相关的代码):

这是AJAX调用返回

success   :   function(data) {
if(data.errors == 'undefined' && data.errors == null) {                     
    ...
} else {
    jQuery(data.errors).each(function(k, v) {
        var html = "<span class='inputError'>" + v + "</span>";
        var errorSpan = '.signUpInputWrap input[name=' + k + ']';
        ...
    });
}

}

所以,在那里你可以看到我正在尝试使用'k'(这是json中返回的输入框名称),所以我可以在DOM中访问它。而不是使用返回的名称,而是使用数组位置。

这是PHP生成错误数组并返回它:

$result = $this->validateInput($post);
..
if($result['result'] == true) {
...
} else {
echo json_encode(array('errors' => $result['errors']));
}

private function validateInput($input) {

    $errors = array();
    foreach($input as $key => $inputItem) {         
        if($key == 'sports_instructed' || $key == 'activities_qualified' | $key == 'sports_qualified') {
            continue;
        }
        if(empty($inputItem)) {
            if($key == 'dob' || $key == 'dobMonth' | $key == 'dobYear') {
                $errors['dob'] = "Please ensure all values are entered for date of birth";
                unset($input[$key]);
            }
            $pieces = explode('_', $key);
            foreach($pieces as &$piece) {
                $piece = ucfirst($piece);
            }
            $name = implode(" ", $pieces);
            $errors[$key] = "Please enter a value for " . $name;
        }

    }       
    if(empty($errors)) {
        $result = array('result' => true);
    } else {
        $result = array('result' => false, 'errors' => $errors);
    }
    return $result;
}

这是JSON结果(如您所见,关键是我想用来使用jQuery在循环中获取元素的输入名称):

{"errors":{"first_name":"Please enter a value for First Name","last_name":"Please enter a value for Last Name","telNum":"Please enter a value for TelNum","dob":"Please ensure all values are entered for date of birth","dobMonth":"Please enter a value for DobMonth","address":"Please enter a value for Address","city":"Please enter a value for City","county":"Please enter a value for County","postcode":"Please enter a value for Postcode","password":"Please enter a value for Password","password_confirm":"Please enter a value for Password Confirm"}}

我可以像在PHP中一样访问Javascrip / jQuery中的关联数组吗? 感谢

3 个答案:

答案 0 :(得分:1)

您应该使用$.each代替$().each。后者将尝试从现有对象中创建一个jquery对象。但是使用第一个选项,您可以直接访问对象

$.each(data.errors, function(k, v) {
   ...
}

答案 1 :(得分:0)

试试这段代码:

jQuery.each(data.errors,function(k, v) {
    console.log("Key:" +k + " : Value: " + v);
});

它对我有用

答案 2 :(得分:0)

$().each可用于DOM对象迭代 e.g: $('div').each(function(){ })

$.each(obj,function(k,v){})函数可用于迭代对象或数组

$.each(data.errors,function(k, v)  {
        var html = "<span class='inputError'>" + v + "</span>";
        var errorSpan = '.signUpInputWrap input[name=' + k + ']';
        ...
    });

供参考http://api.jquery.com/jQuery.each/