在Jquery中通过Json迭代

时间:2011-10-05 16:16:08

标签: jquery json autocomplete

大家好,感谢您提前帮助我。首先,如果我在这里使用错误的短语,请道歉。我不是很担心这里的语法,只是让它工作。现在,问题是:我有django序列化程序输出以下JSON:

[
    {
        "pk": 11262, 
        "model": "dict.words", 
        "fields": {
            "lang": "KO", 
            "incorrect": null, 
            "sug_translation": [
                3215
            ], 
            "word": "\uc0dd\uac01\ud558\ub2e4", 
            "definition": [], 
            "pos": "VE", 
            "phrase": [], 
            "translation": [
                {
                    "pk": 1, 
                    "model": "dict.words", 
                    "fields": {
                        "word": "comprender"
                    }
                }, 
                {
                    "pk": 6028, 
                    "model": "dict.words", 
                    "fields": {
                        "word": "entender"
                    }
                }
            ], 
            "incomplete": null
        }
    }
]

我想做的是访问fields.translation.fields.words,因此自动完成的Jquery是

$(function() {

             $( "#query_form" ).autocomplete({
                     minLength: 2,
                     source: 'http://127.0.0.1:8000/json_results/',
                     focus: function( event, ui ) {
                             $( "#query_form" ).val( ui.item.word );
                             return false;
                     },
             select: function( event, ui ) {
                     $.get ('http://127.0.0.1:8000/json_detail/',
                                {
                                 item: ui.item.pk
                                },
                                function(data) {
                                 $('#query_result').prepend(data);
                                });
                     $( "#query_form" ).val( ui.item.word );
                     return false;
             }
     })
     .data( "autocomplete" )._renderItem = function( ul, item ) {
                        var tran = $.each(item.fields.translation, function(i){item.fields.translation[i].fields.word})
                return $( "<li></li>" )
                        .data( "item.autocomplete", item )
                        .append("<a>" + item.fields.word + tran + "</a>")
                        .appendTo( ul );
     };
});

我一般都是jquery和javascript的总菜鸟,所以请原谅任何明显的格式错误。无论如何,这里的问题是,虽然这实际上发出了请求,并且自动完成函数,$ .each(item.fields.translation,function(i)item.fields.translation [i] .fields.word})返回自动完成列表中的[object,Object]。如果我通过alert()输出它,则返回正确的值。如果我只是在.append行中使用item.fields.translation [0] .fields.word,它会输出该值。但出于某种原因,当我要求它做我想做的事时,我得到[object Object] 所以,任何人都知道我做错了什么?非常感谢提前!

1 个答案:

答案 0 :(得分:1)

您将变量tran设置为$.each()函数,returns jQuery。这就是它最终成为一个对象的原因。

我不清楚你究竟要做什么。你循环遍历item.fields.translation数组中的项,但最终做一个追加,好像这个循环应该只返回一个字符串。但是item.fields.translation在其数组中有两个项目,所以......你可以构建一个这样的数组:

var tran = [];
$.each(item.fields.translation, function(i){
    tran.push(item.fields.translation[i].fields.word);
});
//tran now equals ['comprender','entender']

不确定这是否有帮助。如果你澄清了tran的期望,那么我可以进一步提供帮助。

并注意:您可以将当前迭代中的项的值 - 而不仅仅是其索引/键 - 传递给$.each()中的函数。例如:

$.each(item.fields.translation, function(i,v){
    //the following is the same as tran.push(item.fields.translation[i].fields.word);
    tran.push(v.fields.word);
});