0

我有一个用户表单,它进行 AJAX 调用,它返回一个 JSON 对象供我根据用户输入的内容进行操作。当出现错误时(例如,用户没有在输入字段中输入任何内容),输入框名称将与错误消息一起返回,并存储在错误数组中,然后在 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 中的关联数组?谢谢

4

3 回答 3

1

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

$.each(data.errors, function(k, v) {
   ...
}
于 2013-10-01T09:27:24.383 回答
0

试试这个代码:

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

它对我有用

于 2013-10-01T09:32:52.650 回答
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/

于 2013-10-01T09:39:38.573 回答