使用格式化JSON数据作为jQuery-UI自动完成源的问题

时间:2011-03-08 08:30:49

标签: javascript jquery-ui jquery

嘿,伙计们。我对jQuery和javascript很新,我在使用jQuery-ui中的Autocomplete小部件时遇到了一些麻烦。

我正在尝试获取一大堆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()打印回调中的结果时,我得到了预期的结果。但无论出于何种原因,当我使用此数组作为其源时,自动完成功能无效。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您想使用dogNames.push(json[k].disp)填充数组。

现在您的代码将dogNames视为关联数组或对象,不能将其用作自动完成的源选项。这是因为“k”的值是一个字符串,而不是整数。自动完成源数组的顺序不相关,因此不要试图索引到您正在创建的数组。只需将每个元素推到它上面,然后让插件为您完成繁重的工作。

答案 1 :(得分:0)

以逗号分隔字符串获取dognames并尝试此

 $( '.dog' ).autocomplete( "option", "source", dogNames.split(','));