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。Eval は悪い習慣です。これは次のように書くことができます:

var userinfo = データ;

application/jsonサーバーから適切なヘッダー ( ) が送信された場合、またはパラメーターに渡されたjson場合、JQuery は応答を解析しdataTypeます。のデフォルトでもdataTypeですintelligent guess

于 2012-12-22T05:02:59.073 に答える
1

2 番目のアプローチは正しいものですuserinfo['description']。これは配列であるため、反復する必要があります。ただし、反復の現在の要素にアクセスする必要があります。

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

または明示的な 2 番目のパラメーターを使用thisして、現在の要素を取得できます (最初のパラメーターは配列内のインデックスです)。詳細については、ドキュメントを確認してjQuery.eachください。

ところで、私は 2 番目の @closure を使用していますが、これevalはセキュリティ上賢明ではありません。json 形式の文字列を解析する必要がある場合は、$.parseJSON代わりに (環境でサポートされている場合は )を使用します。JSON.parseこの場合、successコールバックがすでにそれを行っているため、不要です。

于 2012-12-22T05:04:15.930 に答える
0

これを参照してください: http://closure-library.googlecode.com/svn/docs/closure_goog_json_json.js.html

これは確かに完全に役立つでしょう:)

于 2012-12-22T05:07:13.190 に答える
0

配列インデックスを使用してアクセスする必要がある配列内の説明:

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