以下是我的json
回复:
{"fname":"abc","lname":"xyz","email":"test@user.com","description":[{"city":"abcxyz","address":"AX","country":"US","date":"2020-02-01"},{"city":"abcxyz","address":"AX","country":"US","date":"2020-02 01"}], "city":"abcxyz","address":"DS","country":"US","Month":"12","Year":"2012"}
以下是我的代码:
success: function(data)
{
var userinfo=eval(data);
alert(userinfo['fname1']; //display correct result
alert(userinfo['description']['city']; //display undefined
if(!$("#fname1").val()) $("#fname1").val(userinfo['fname']);
if(!$("#lname1").val()) $("#lname1").val(userinfo['lname']);
}
成功功能如果我正在尝试提醒alert(userinfo['fname1']
,那么它会向我显示正确的结果,即显示名称,但如果我尝试提醒alert(userinfo['description']['city']
,那么它会在警报中显示undefined
然后我尝试使用each
循环,但仍然无效
$.each(userinfo['description'], function() {
alert(userinfo'description']['city']; //not working
$("#city option[value="+userinfo['description']['city']+"]").attr("selected", "selected");
});
以下是我的HTML:
<select name="country" id="country">
<?php
foreach ($this->description as $country) {
?>
<option value="<?php echo $country['country']; ?>" <?php echo ($this->params['country'] == $country['country']) ? "selected='selected'" : ""; ?>><?php echo $country['country']; ?></option>
<?php }
?>
</select>
任何人都可以告诉我我错的地方。感谢。
答案 0 :(得分:3)
你需要这样做:
警报(用户信息[ '描述'] [0] [ '城市'];
userinfo['description']
是一个数组。您需要首先引用元素索引。引用该对象后,请参阅属性
我认为不需要eval
。 Eval是一种不好的做法。您可以这样写:
var userinfo = data;
如果服务器发送了正确的标头(application/json
),或者您已通过json
dataType
参数,则JQuery会解析响应。即使dataType
的默认值为intelligent guess
。
答案 1 :(得分:1)
你的第二种方法是正确的,你应该遍历userinfo['description']
,因为它是一个数组。但是,您应该访问迭代的当前元素:
$.each(userinfo['description'], function() {
alert(this['city'];
$("#city option[value="+this['city']+"]").attr("selected", "selected");
});
您可以使用this
或显式第二个参数来获取当前元素(第一个参数是数组中的索引)。查看jQuery.each
的文档以获取更多信息。
BTW我第二次@closure,使用eval
是不安全的。当需要解析json格式的字符串时,请使用$.parseJSON
代替(或JSON.parse
,如果您的环境支持它)。在这种情况下,它是不必要的,因为success
回调已经对你做了。
答案 2 :(得分:0)
您需要使用数组索引访问的数组中的描述:
userinfo["description"]["0"]["city"]
答案 3 :(得分:0)