0

json で空の配列を特定し、代わりに div を配置しようとしています。スクリプトが空の配列を確認した時点で、json のロードを停止します。コードは次のとおりです。

$.each(data.posts, function (i, item) {
    var newstitle = item.title;
    var newstmbn = item.thumbnail;

    if (data !== undefined && data.posts !== undefined && data.posts.attachments !== undefined) {
        $.each(item.attachments, function (i2, type) {
            $('#news').append('<div>' + item.thumbnail + '</div>');
        });
    } else {
        $.each(item.attachments, function (i2, type) {
            $('#news').append('<div>' + type.images.thumbnail.url + '</div>');
        });
    }
    output.append(news);

});

私のjsonは次のようになります:

{
    "posts": [
    {
        "id": 914,
        "title": "post1",
        "thumbnail": "\/uploads\/url.jpeg",
        "attachments": [
        {
            "images": {
                "thumbnail": {
                    "url": "\/uploads\/url-150x92.jpeg"
                }
            }
        }
        ]
    },
    {
        "id": 915,
        "title": "post1",
        "thumbnail": "\/uploads\/url.jpeg",
        "attachments": []
    },
    {
        "id": 914,
        "title": "post1",
        "thumbnail": "\/uploads\/url.jpeg",
        "attachments": [
        {
            "images": {
                "thumbnail": {
                    "url": "\/uploads\/url-150x99.jpeg"
                }
            }
        }
        ]
    }
]}

したがって、いくつかの「添付ファイル」が空であることがわかります。代わりに「item.thumbnail」を配置したいのですが、機能していないようです。手伝ってくれませんか?

4

1 に答える 1

2

あなたの主な問題はこの行だと思います:

 if (data !== undefined && data.posts !== undefined && data.posts.attachments !== undefined)

これは、配列を反復する .each ループ内に配置されますdata.posts

if (data !== undefined && data.posts !== undefined)

ループが可能かどうかをテストするために、そのループの外側に配置する必要があります。

data.posts.attachments !== undefined

data.posts は配列であり、そのため attachments プロパティがないため、意味がありません。代わりに

if(item.attachments !== undefined)

これが false の場合、つまりアイテムに添付ファイルがない場合、現在行っているように item.attachments を反復処理することはできません。また、if/else を間違った方法で取得したので、置き換えます

$.each(item.attachments, function (i2, type) {
    $('#news').append('<div>' + type.images.thumbnail.url + '</div>');
});

$('#news').append('<div>' + item.thumbnail + '</div>');

$.each(item.attachments, function (i2, type) {
    $('#news').append('<div>' + item.thumbnail + '</div>');
});

$.each(item.attachments, function (i2, type) {
    $('#news').append('<div>' + type.images.thumbnail.url + '</div>');
});

編集:上記は従うのが難しいかもしれないことを認識しているので、正しいコードであると私が信じるものは次のとおりです。

if (data !== undefined && data.posts !== undefined) {
    $.each(data.posts, function (i, item) {
        if (item.attachments !== undefined && item.attachments.length > 0) {
            $.each(item.attachments, function (i2, type) {
                $('#news').append('<div>' + type.images.thumbnail.url + '</div>');
            });
        } else {
            $('#news').append('<div>' + item.thumbnail + '</div>');
        }
        output.append(news); //I assume output is a valid jquery object...
    });
}

http://jsfiddle.net/Jh3hk/の概念実証

于 2013-03-27T22:07:08.520 に答える