我正在尝试获取一大堆JSON数据,这些数据是从mySQL数据库中提取的,并以相当具体的方式使用PHP格式化。然后我想将这些数据的一部分格式化为一个数组,然后将其用作自动完成小部件的源。
这是自动完成位:
var dogs = [];
$( '.dogs' ).autocomplete({
source: dogs,
delay: 10,
});
非常基本,我可以按预期工作。当我开始使用Ajax时,事情变得令人困惑。
我的JSON数据格式为"0":{"actu":"Actual Name0","disp":"Display Name0"},"1":{"actu":"Actual Name1","disp":"Display Name1"}, etc.
,因此每个'dog'都有两个名称和一个唯一的数字ID,以便更容易遍历数据。
var dogNames = [];
$.getJSON("dataconditioner.php", function(json) {
for (var k in json){
dogNames[k] = json[k]["disp"];
}
$( '.dog' ).autocomplete( "option", "source", dogNames);
});
这里的目标是将所有显示名称放入一维数组,然后让自动完成使用该数组作为其源。数组似乎正确形成,因为当我使用alert()
打印回调中的结果时,我得到了预期的结果。但无论出于何种原因,当我使用此数组作为其源时,自动完成功能无效。
提前致谢。
答案 0 :(得分:1)
您想使用dogNames.push(json[k].disp)
填充数组。
现在您的代码将dogNames视为关联数组或对象,不能将其用作自动完成的源选项。这是因为“k”的值是一个字符串,而不是整数。自动完成源数组的顺序不相关,因此不要试图索引到您正在创建的数组。只需将每个元素推到它上面,然后让插件为您完成繁重的工作。
答案 1 :(得分:0)
以逗号分隔字符串获取dognames并尝试此
$( '.dog' ).autocomplete( "option", "source", dogNames.split(','));