0

以下是我的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>

谁能告诉我哪里出错了。谢谢。

4

4 回答 4

3

你需要做:

alert(userinfo['description'][0]['city'];

userinfo['description']是一个数组。您需要先按索引引用元素。引用对象后,请引用属性

我不认为有任何需要eval。评估是一种不好的做法。你可以这样写:

var 用户信息 = 数据;

application/json如果服务器发送了正确的标头 ( ) 或者您传递json了 fordataType参数,则 JQuery 会解析响应。甚至默认dataTypeintelligent guess.

于 2012-12-22T05:02:59.073 回答
1

你的第二种方法是正确的,你应该迭代,userinfo['description']因为它是一个数组。但是,您应该访问迭代的当前元素:

$.each(userinfo['description'], function() {
    alert(this['city'];
    $("#city option[value="+this['city']+"]").attr("selected", "selected");
});

您可以使用任何一个this或显式的第二个参数来获取当前元素(第一个参数是数组中的索引)。查看文档以jQuery.each获取更多信息。

顺便说一句,我第二个@closure,使用eval是不安全的。当您需要解析 json 格式的字符串时,请改用(或者,如果您的环境支持)$.parseJSONJSON.parse在这种情况下,它是不必要的,因为success回调已经对你做了。

于 2012-12-22T05:04:15.930 回答
0

您需要使用数组索引访问的数组中的描述:

userinfo["description"]["0"]["city"]
于 2012-12-22T05:04:44.100 回答
0

看到这个:http ://closure-library.googlecode.com/svn/docs/closure_goog_json_json.js.html

这肯定会很有帮助:)

于 2012-12-22T05:07:13.190 回答