Javascript json数据如何以jquery$.each的形式显示
我使用的是Javascript json数据如何以jquery$.each的形式显示,javascript,php,jquery,json,Javascript,Php,Jquery,Json,我使用的是$。我在这里得到的json响应的每个循环都是 ["errors",[ {"element":"country_name","error":"Value is required and can't be empty"}, {"element":"dial_code","error":"Value is required and can't be empty"}, {"element":"country_code","error":"
$。我在这里得到的json响应的每个
循环都是
["errors",[
{"element":"country_name","error":"Value is required and can't be empty"},
{"element":"dial_code","error":"Value is required and can't be empty"},
{"element":"country_code","error":"Value is required and can't be empty"}
]
]
$.each(response.errors, function (i, field) {
alert(field);
});
但我没有任何警觉。有谁能告诉我们如何做到这一点
新更新
实际上,我正在使用zend框架并转换一个名为$messages的数组,它看起来是这样的
Array
(
[country_name] => Array
(
[isEmpty] => Value is required and can't be empty
)
[dial_code] => Array
(
[isEmpty] => Value is required and can't be empty
)
[country_code] => Array
(
[isEmpty] => Value is required and can't be empty
)
)
<?php
foreach ($messages as $key => $value) {
$errors[] = array("element"=>$key,"error"=>$value['isEmpty']);
}
?>
然后我把这个数组转换成我实际需要的东西,就像这样
Array
(
[country_name] => Array
(
[isEmpty] => Value is required and can't be empty
)
[dial_code] => Array
(
[isEmpty] => Value is required and can't be empty
)
[country_code] => Array
(
[isEmpty] => Value is required and can't be empty
)
)
<?php
foreach ($messages as $key => $value) {
$errors[] = array("element"=>$key,"error"=>$value['isEmpty']);
}
?>
然后我将其转换为json编码并返回到success函数
<?php
$response = $this->getResponse();
$response->getHeaders()->addHeaderLine( 'Content-Type', 'application/json' );
$response->setContent(json_encode(array("errors",$errors)));
return $response;
?>
您的json应该是:
var response={"errors":[
{"element":"country_name","error":"Value is required and can't be empty"},
{"element":"dial_code","error":"Value is required and can't be empty"},
{"element":"country_code","error":"Value is required and can't be empty"}]
}
因为现在json包含两列,第一列包含worderrors
,第二列包含3个对象
var响应={“错误”:[
{“元素”:“国家/地区名称”,“错误”:“值是必需的,不能为空”},
{“元素”:“拨号代码”,“错误”:“值是必需的,不能为空”},
{“元素”:“国家/地区代码”,“错误”:“值是必需的,不能为空”}]
};
$.each(response.errors,函数(i,字段){
控制台日志(字段);
});代码>
我想你的json有问题,你能试试下面的代码吗
$(function(){
var response = {"errors":
[{
"element": "country_name",
"error": "Value is required and can't be empty"
},
{
"element": "dial_code",
"error": "Value is required and can't be empty"
},
{
"element": "country_code",
"error": "Value is required and can't be empty"
}]}
$.each(response.errors, function (index, piece) {
$.each(piece,function(key,value){
alert(key+"--"+value);
})
});
});
下面是一个工作示例:
下面是php代码的更新,您的输出应该是这样的
<?PHP
//Create new object
$responseObject = new stdClass();
//Create new object property as an array which means you are going to output "errors" as an json key not an array item
$responseObject->errors = array();
//Populate the response
foreach ($messages as $key => $value) {
$responseObject->errors[] = array("element"=>$key,"error"=>$value['isEmpty']);
}
//Create output
$response->setContent(json_encode($responseObject));
?>
希望这有助于JSON响应:
[
"errors",
[
{"element":"country_name","error":"Value is required and can't be empty"},
{"element":"dial_code","error":"Value is required and can't be empty"},
{"element":"country_code","error":"Value is required and can't be empty"}
]
]
是由两个元素组成的数组。第一个元素是string“errors”
,第二个元素是对象数组。因此,您应该循环响应的第二个元素(即响应[1]
),如下所示:
$.each(response[1], function (i, field) {
console.log(field);
});
另外,我建议您使用console.log()
而不是alert()
进行调试
有关运行示例,请参见。此处的操作:
$response->setContent(json_encode(array("errors",$errors)));
将产生JSON:
["errors",[
{"element":"country_name","error":"Value is required and can't be empty"},
{"element":"dial_code","error":"Value is required and can't be empty"},
{"element":"country_code","error":"Value is required and can't be empty"}
]
]
这是正确的,但有点不寻常。要访问错误数组,您可以执行以下操作:
var response = data; // data is JSON from server
$.each(response[1], function (i, field) {
console.log(field); // alert(field);
});
// response[0] is string "errors"
// response[1] is array of error message objects
如果您希望JSON如下所示:
{
"errors":[
{"element":"country_name","error":"Value is required and can't be empty"},
{"element":"dial_code","error":"Value is required and can't be empty"},
{"element":"country_code","error":"Value is required and can't be empty"}
]
}
var response = data; // data is JSON from server
$.each(response.errors, function (i, field) {
console.log(field); // alert(field);
});
您需要将服务器代码更改为:
$response->setContent(json_encode(array("errors" => $errors)));
然后,您可以像这样处理响应数据:
{
"errors":[
{"element":"country_name","error":"Value is required and can't be empty"},
{"element":"dial_code","error":"Value is required and can't be empty"},
{"element":"country_code","error":"Value is required and can't be empty"}
]
}
var response = data; // data is JSON from server
$.each(response.errors, function (i, field) {
console.log(field); // alert(field);
});
检查控制台是否有错误。它显示“TypeError:a未定义”如果我使用这个[{“元素”:“国家/地区名称”,“错误”:“值是必需的,不能为空”},{“元素”:“拨号代码”,“错误”:“值是必需的,不能为空”},{“元素”:“国家/地区代码”,“错误”:“值是必需的,不能为空”}]@phpdevp这意味着您正在创建一个没有父键的数组,这意味着如果您$。您的每个(响应)迭代看起来都是{“element”:“…”,“error”:“…”}
@phpdevp它将起作用。您可以在这里看到一个示例:我使用的正是您所写的,但它显示了这个错误“ypeError:invalid'in”操作数a问题中的JSON是有效的,它是由两个元素组成的数组,一个字符串,另一个数组。他的JSON是完全有效的,没有理由说他的JSON应该不同。有时我们无法更改另一方发送的JSON。我并不是在我的帖子中提到它不是有效的JSON,我只是说,使用当前JSON结构(他/她)无法使用响应获取对象。错误,如果(他/她)无法更改JSON结构,则可以使用响应[1]
,检查我的更新,但在我的浏览器中,它会显示此错误“TypeError:invalid'in'operand a”嘿,我也在使用“var response=JSON.stringify(data);”当我提醒此响应时,它会显示我正在使用的JSON字符串。使用此字符串化数据有什么问题吗?@phpdevp,如果您像var response=JSON.stringify(数据)那样字符串化数据然后尝试执行$。每个(响应[1],…)
。。。是的,这很重要,因为stringify
会将数据转换为字符串。你应该做var-response=data当你接受答案时,你不确定你使用的策略是什么,但是你应该考虑时机,在这种情况下,我的答案是第一次。也许我的答案给出了更好的解释。你的答案也是正确的,但是有点晚了,但是THNXX帮助了它现在的工作。