使用搜索功能访问json

时间:2014-08-23 20:00:17

标签: javascript jquery json

我想知道是否有人可以帮助我了解如何在我的json doc中访问数据。

[
    {
        "article":"title",
        "img_thumb":"images/image.png",
        "article_content":"This is content",
        "alt":["keyword", "keyword2"]
    },
    {
        //here's article 2
    }
]

当document.ready,我正在执行这个功能,它完美地运作:

var article_populate = function(){
    $.getJSON('json/test.json', function(data){
        $.each(data, function(key, val){
            var article = "<div class='thumb'><img src='" + val.img_thumb + "' class='img_thumb'><div class='div_btn article' id='" + val.article + "'>" + val.article + "</div></div>";
            $('#srch_rslt').append(article);
        });
    })
}

然后,如果用户点击文章标题,我想将文章内容从json附加到文章标题所在的div。

更新:现在正在运作。

$('#srch_rslt').on('click', '.article_title', function(){
    var get_article = $(this).attr('id');
    console.log(get_article);
    $.getJSON('json/test.json', function(data){
        $.each(data, function(key, val){
            if(val.article_id == get_article){
                console.log(val.article_content)
                $('#' + get_article).parent().append(val.article_content);
            }
        });
    });
});

3 个答案:

答案 0 :(得分:1)

在第二个示例中,您似乎错误地使用了$.getJSON,而在第一个示例中正确使用了 $.getJSON('json/test.json', function(data, key, val){ 。比较

    $.getJSON('json/test.json', function(data){
        $.each(data, function(key, val){

$('#srch_rslt').on('click', '.article_title', function(){
    var get_article = $(this).attr('id');
    console.log(get_article);

    var article = $(this);
    $.getJSON('json/test.json', function(data){
        $.each(data, function(key, val){
            if(val.article_id == get_article){
                console.log(val.article_content)
                article.parent().append(val.article_content);
            }
        });
    });
});

编辑以回复原始问题的修改:

你需要做这样的事情:

this

同样,正如评论中所述,我建议您阅读{{1}}在JavaScript中的工作原理。

答案 1 :(得分:0)

val是一个包含多篇文章的数组吗? 所以你的调用为val.article提供了undefined似乎是合乎逻辑的 我的你的json文件文章不是最低级别所以它应该像

val.0.article.search(get_article)

val.1.article.search(get_article)

我建议使用console.log(var)将var的内容转储到控制台;了解如何正确访问数据或正确加载数据。

答案 2 :(得分:0)

您不应将article.title用作ID,因为它可能包含非法字符(',“,à,é....)。

由于您的数据结构是一个数组,您可以使用所点击文章的索引来获取数据:

var articleIndex = $(this).index(); 有了这个,你可以从你的json获得相应的数据:

var articleData = data[articleIndex]

现在您可以附加文章内容: $('selector_where_you_want_data').append(articleData.article_content);

快速而肮脏的方式是: $('selector_where_you_want_data').append(data[$(this).index()].article_content);