我有一个用户表单,它进行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中的关联数组吗? 感谢
答案 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 + ']';
...
});