1

サーブレットから渡したJSONオブジェクトからデータを取得しようとしています。しかし、私の鍵には番号が付けられています。キーに付けた名前にこれらの番号を追加する必要があります。

私の応答は次のようになります。

{"shareInfo1":[{"uname":"xyz","image":"iVBO..","imname":"ryty","senderPicture":"iVBOR"}],"shareInfo2":[{"uname":"sds","image":"iVBO","imname":"ryty","senderPicture":"iVBOR}],....}

私は次のコードで試しました:

$.ajax({
    type: "GET",
    url: "RetrieveShares",
    data:'action='+encodeURIComponent(action),
    dataType: "json",
    success: function( data, textStatus, jqXHR)
    {
    if(data.success)
    {

for(var z=1;z<=data.loops;z++)
{
len=data["shareInfo"+z].length;
for(var k = len-1;k>=0;k -= 1){
    var newcommhtml = '<div id="S0'+thecid+'" class="snew">';
    newcommhtml = newcommhtml + '<div class="author-image"><img src="data:image/jpeg;base64,'+data["shareInfo"+z][k].senderPicture+'" alt="'+data["shareInfo"+z][k].uname+'" width="100%" height="100%" class="ava"></div><span>'+data["shareInfo"+z][k].uname+' shared the image '+data["shareInfo"+z][k].imname+'</span>';
    newcommhtml = newcommhtml + '<div class="s-content"><div class="s-message"><span>'+nl2br(data["shareInfo"+z][k].message+'</span></div><div class="shpicture">');
    newcommhtml = newcommhtml + '<img src="data:image/jpeg;base64,'+data["shareInfo"+z][k].image+'" alt="'+data["shareInfo"+z][k].imname+'" width="100%" height="100%" class="SharedImage" class="SharedImage" data-id="'+data["shareInfo"+z][k].id+'" data-alid="'+data["shareInfo"+z][k].alid+'" data-shareid="'+data["shareInfo"+z][k].shareId+'">';
    newcommhtml = newcommhtml + '</div></div>';
    var thelm = "#S0"+thecid;
    $('#spscrl').append(newcommhtml);
    $(thelm).hide().fadeIn('slow');
    newcommhtml ='<div class="SPcommentbox">';
    var i=0;
    if(Object.keys(data["shareInfo"+z][k]).length>8)
    {
        var x;
        for(x=data["shareInfo"+z][k].loopreq-1;x>=0;x-=1)
            {
       newcommhtml = newcommhtml + '<div class="comment"><div class="commenter-image"><img src="data:image/jpeg;base64,'+data["shareInfo"+z][k]["commenterPicture"+i]+'" alt="'+data["shareInfo"+z][k]["whocommented"+i]+'" width="100%" height="100%" class="ava"></div><div class="commentername">'+data["shareInfo"+z][k]["whocommented"+i]+'</div><span>'+data["shareInfo"+z][k]["commented"+i]+'</span></div>';
       i+=1;
            }
    }
    newcommhtml = newcommhtml + '<div class="comment"><div class="commenter-image">';
    newcommhtml = newcommhtml +'</div><div class="addcomment"><input type ="text" placeholder="Write a comment..." class="commentbox"></input></div></div>';
    $('#spscrl').append(newcommhtml);
    thecid++;
    }
    $(".primg > img").first().clone().appendTo(".commenter-image");
    }
    }
 },
    error: function(jqXHR, textStatus, errorThrown)
    {
    alert("error"+errorThrown);
    console.log("Something really bad happened " + textStatus);
    },
    });

しかし、それはエラーを生成しますTypeError: data[("shareInfo" + z)] is undefined

誰かが私がこの問題を解決するのを手伝ってください...ありがとう...

4

3 に答える 3

0

私はこれがあなたの質問に直接答えないことを知っています、しかしそれはそれを整理する方法を提供するかもしれません。

バックエンドを変更できる場合は、配列を使用するように返されるデータの形式を変更することをお勧めします。

{
  "shareInfo":[
     {...},
     {...},
     {...}
  ]
}

次に、通常のshareInfo [index]、shareInfo.lengthなどを使用できます。

于 2013-03-20T09:32:57.943 に答える
-1

サーブレットは、jsonオブジェクトをオブジェクトではなく文字列として送信しています。したがって、最初にそれを次のようなJSONオブジェクトに変換する必要があります

data = eval( '(' + response + ')' );
data["shareInfo"+z].length;
于 2013-03-20T09:12:30.220 に答える
-1

DOM要素の変更を開始する前に、小さくて簡単な構造を作成してください。

これは、jQuerys $ .each()関数を使用した例です。

var data = {
    loops: {
        "shareInfo1": [
            {
                "uname": "xyz",
                "image": "iVBO..",
                "imname": "ryty",
                "senderPicture": "iVBOR"
            },
            {
                "uname": "abc",
                "image": "iVBO..",
                "imname": "smile",
                "senderPicture": "iVBOR"
            }
        ],
        "shareInfo2": [
            {
                "uname": "sds",
                "image": "iVBO",
                "imname": "happy",
                "senderPicture": "iVBOR"
            }
        ]
    }
};

console.log('data', data); // DEBUG

// Iterating the data
$.each(data.loops, function(key, shareInfo) {
    console.log('shareInfo', key, shareInfo); // DEBUG

    $.each(shareInfo, function(key, user) {
        console.log('user', key, user); // DEBUG

        // Username: user.uname
    });

});
于 2013-03-20T10:03:49.847 に答える