大家好,感谢您提前帮助我。首先,如果我在这里使用错误的短语,请道歉。我不是很担心这里的语法,只是让它工作。现在,问题是:我有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] 所以,任何人都知道我做错了什么?非常感谢提前!
答案 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);
});