2

可能重复:
jquery autocomplete this.source 不是函数错误

我有一个自动完成功能,我想将它连接到我的 API 以返回所有客户帐号。问题是我的 API 返回一个对象:AccountNumber、InvoiceNumber、Name、Address 等。当我尝试将我的源设为 AccountNumber 时,如下所示:

$.getJSON('/api/Customers', function(data) {
    $("#AccountNumber").autocomplete({
        source: data.AccountNumber,
        minLength: 4
    });
});

我得到了这个错误:

Uncaught TypeError: Property 'source' of object #<Object> is not a function

任何想法我在这里做错了什么?

4

2 回答 2

2

由于回调返回一个对象,因此您必须提取数据并将其放在一个数组中。只要data是一组帐户对象,您就可以试试这个:

$.getJSON('/api/Customers', function(data) {
    var acctNums = [];
    for(a in data) {
        acctNums.push(data[a].AccountNumber);
    }   

    $("#AccountNumber").autocomplete({
        source: acctNums,
        minLength: 4
    });
});

另一种选择是只添加一个不同的请求路由,该路由只会返回一组客户帐号。这样你就可以这样传递它:

$.getJSON('/api/Customers/AccountNums', function(data) {
    $("#AccountNumber").autocomplete({
        source: data,
        minLength: 4
    });
});

最后,您可以让jQuery UI 插件处理调用。您需要创建一个不同的请求路由,该路由仅返回一个 JSON 对象数组,用于自动完成(每个包含valuelabel属性)。然后只需使用路由的绝对或相对 URL 即可获取数据。下面是一个小例子:

$("#AccountNumber").autocomplete({
    // This GET Request returns an Array of Objects used for Auto-Complete:
    // [ { label: "Choice1", value: "value1" }, ... ]
    source: '/api/Customers/AccountNumsAuto',
    minLength: 4
});
于 2012-09-10T14:49:58.373 回答
0

jQuery UI 自动完成的源属性必须是:

  • 结果数组:
    source : ["string1","string2","string3","string4"]

  • 一个字符串(处理查询的远程 PHP 页面的 url),这将触发对该页面的 ajax 请求,其参数 namedterm包含搜索值:
    source : "page.php"

  • 使用 2 个参数request和调用的函数response。第一个包含搜索的值 ( request.term),第二个包含一个您必须用这些值填充的对象。

您应该阅读 jQuery UI文档
在您的情况下,您可以将您的 JSON 转换为结果数组。

于 2012-09-10T14:52:13.393 回答