3

我正在使用Twitter 中的Typeahed.js库从单个输入框中搜索我的数据库中的多个数据集。

我目前正在使用 6 个数据集(参见下面的代码),我想再添加 1 个。我发现它不适用于第 7 个数据集(products dataset来自下面的代码)。在输入框中输入搜索查询时,它只会发送前六个数据集的 GET AJAX 请求,而忽略第 7 个?

GET http://127.0.0.1/app/typeahead_orders.json?q=MSI-20mA
GET http://127.0.0.1/app/typeahead_invoices.json?q=MSI-20mA
GET http://127.0.0.1/app/typeahead_services.json?q=MSI-20mA%
GET http://127.0.0.1/app/typeahead_serials.json?q=MSI-20mA%
GET http://127.0.0.1/app/typeahead_users.json?q=MSI-20mA%
GET http://127.0.0.1/app/typeahead_licenses.json?q=MSI-20mA%

图书馆文档是倾倒的,我没有看到它提到你可以使用的数据集数量的任何限制......

$('#search-query').typeahead([
    {
        name: 'orders',
        remote: base_url+"utilities/ajaxprocess/typeahead_orders.json?q=%QUERY",
        template: '<a href="'+base_url+'orders/view/{{order_id}}">{{value}} - Reference no.: {{reference_number}}</a>',
        header: '<h5 class="search-result-header"><i class="icon-shopping-cart"></i> Orders</h5>',
        engine: Hogan,
        limit: 6
    },
    {
        name: 'invoices',
        remote: base_url+"utilities/ajaxprocess/typeahead_invoices.json?q=%QUERY",
        template: '<a href="'+base_url+'invoices/view/{{invoice_id}}">{{invoice_number}} - {{company}}</a>',
        header: '<h5 class="search-result-header"><i class="icon-file"></i> Invoices</h5>',
        engine: Hogan,
        limit: 6
    },
    {
        name: 'services',
        remote: base_url+"utilities/ajaxprocess/typeahead_services.json?q=%QUERY%",
        template: '<a href="'+base_url+'services/view/{{rma_id}}">{{value}} - {{firstname}} {{lastname}}</a>',
        header: '<h5 class="search-result-header"><i class="icon-wrench"></i> RMA services</h5>',
        engine: Hogan,
        limit: 6
    },
    {
        name: 'serials',
        remote: base_url+"utilities/ajaxprocess/typeahead_serials.json?q=%QUERY%",
        template: '<a href="'+base_url+'serials/view/{{serial_id}}">{{value}} - {{product}} {{module_name}}</a>',
        header: '<h5 class="search-result-header"><i class="icon-barcode"></i> Serials</h5>',
        engine: Hogan,
        limit: 6
    },
    {
        name: 'users',
        remote: base_url+"utilities/ajaxprocess/typeahead_users.json?q=%QUERY%",
        template: '<a href="'+base_url+'users?f=1&filter_id={{user_id}}">{{firstname}} {{lastname}} - {{email}}</a>',
        header: '<h5 class="search-result-header"><i class="icon-user"></i> Users</h5>',
        engine: Hogan,
        limit: 6
    },
    {
        name: 'licenses',
        remote: base_url+"utilities/ajaxprocess/typeahead_licenses.json?q=%QUERY%",
        template: '<a href="'+base_url+'licenses?f=1&filter_id={{license_id}}">{{key}} - {{version}}</a>',
        header: '<h5 class="search-result-header"><i class="icon-lock"></i> Licenses</h5>',
        engine: Hogan,
        limit: 6
    },
    {
        name: 'products',
        remote: base_url+"utilities/ajaxprocess/typeahead_products.json?q=%QUERY%",
        template: '<a href="'+base_url+'products?f=1&filter_id={{product_id}}">{{code}} - {{name}}</a>',
        header: '<h5 class="search-result-header"><i class="icon-briefcase"></i> Products</h5>',
        engine: Hogan,
        limit: 6
    }
]).on('typeahead:selected', function($e, data) {
    window.location = data.url;
});
4

4 回答 4

2

好的,我想通了。不受限制,但默认最大并行请求为 6。来自 typeahead.js 文档:

maxParallelRequests – The max number of parallel requests typeahead.js can have pending. Defaults to 6.

所以我增加了这个并且它有效。这是最终更正的代码:

$('#search-query').typeahead([
    {
        name: 'orders',
        remote: {
            url: base_url+"utilities/ajaxprocess/typeahead_orders.json?q=%QUERY",
            maxParallelRequests: 8,
        },
        template: '<a href="'+base_url+'orders/view/{{order_id}}">{{value}} - Reference no.: {{reference_number}}</a>',
        header: '<h5 class="search-result-header"><i class="icon-shopping-cart"></i> Orders</h5>',
        engine: Hogan,
        limit: 6
    },
    {
        name: 'invoices',
        remote: {
            url: base_url+"utilities/ajaxprocess/typeahead_invoices.json?q=%QUERY",
            maxParallelRequests: 8,
        },
        template: '<a href="'+base_url+'invoices/view/{{invoice_id}}">{{invoice_number}} - {{company}}</a>',
        header: '<h5 class="search-result-header"><i class="icon-file"></i> Invoices</h5>',
        engine: Hogan,
        limit: 6
    },
    {
        name: 'services',
        remote: {
            url: base_url+"utilities/ajaxprocess/typeahead_services.json?q=%QUERY%",
            maxParallelRequests: 8,
        },
        template: '<a href="'+base_url+'services/view/{{rma_id}}">{{value}} - {{firstname}} {{lastname}}</a>',
        header: '<h5 class="search-result-header"><i class="icon-wrench"></i> RMA services</h5>',
        engine: Hogan,
        limit: 6
    },
    {
        name: 'serials',
        remote: {
            url: base_url+"utilities/ajaxprocess/typeahead_serials.json?q=%QUERY%",
            maxParallelRequests: 8,
        },
        template: '<a href="'+base_url+'serials/view/{{serial_id}}">{{value}} - {{product}} {{module_name}}</a>',
        header: '<h5 class="search-result-header"><i class="icon-barcode"></i> Serials</h5>',
        engine: Hogan,
        limit: 6
    },
    {
        name: 'users',
        remote: {
            url: base_url+"utilities/ajaxprocess/typeahead_users.json?q=%QUERY%",
            maxParallelRequests: 8,
        },
        template: '<a href="'+base_url+'users?f=1&filter_id={{user_id}}">{{firstname}} {{lastname}} - {{email}}</a>',
        header: '<h5 class="search-result-header"><i class="icon-user"></i> Users</h5>',
        engine: Hogan,
        limit: 6
    },
    {
        name: 'licenses',
        remote: {
            url: base_url+"utilities/ajaxprocess/typeahead_licenses.json?q=%QUERY%",
            maxParallelRequests: 8,
        },
        template: '<a href="'+base_url+'licenses?f=1&filter_id={{license_id}}">{{key}} - {{version}}</a>',
        header: '<h5 class="search-result-header"><i class="icon-lock"></i> Licenses</h5>',
        engine: Hogan,
        limit: 6
    },
    {
        name: 'products',
        remote: {
            url: base_url+"utilities/ajaxprocess/typeahead_products.json?q=%QUERY%",
            maxParallelRequests: 8,
        },
        template: '<a href="'+base_url+'products?f=1&filter_id={{product_id}}">{{code}} - {{name}}</a>',
        header: '<h5 class="search-result-header"><i class="icon-briefcase"></i> Products</h5>',
        engine: Hogan,
        limit: 6
    },
    {
        name: 'tasks',
        remote: {
            url: base_url+"utilities/ajaxprocess/typeahead_tasks.json?q=%QUERY%",
            maxParallelRequests: 8,
        },
        template: '<a href="'+base_url+'tasks?f=1&filter_id={{task_id}}">#{{task_id}} - {{description}}</a>',
        header: '<h5 class="search-result-header"><i class="icon-briefcase"></i> Tasks</h5>',
        engine: Hogan,
        limit: 6
    }
]).on('typeahead:selected', function($e, data) {
    window.location = data.url;
});
于 2013-11-13T18:56:55.323 回答
0

我没有听说过这样的限制,我想知道前6个可能满足的返回结果的最大数量是多少?

一个快速测试将基本上强制您的几个远程查询始终不返回任何内容。

如果您的第七次搜索开始受到打击,那可以解释它。

于 2013-11-13T11:13:56.970 回答
0

打开 Twitter typeahead.js 文件。

搜索:“maxPendingRequests = 6”

而不是 6 只需输入您想要的任何值。

现在我可以看到超过 6 个请求并行运行。

这对我来说可以。

不要去寻找'maxParallelRequests'属性,它根本不起作用......

我相信这是最终的解决方案......

于 2016-04-27T16:28:01.010 回答
0

如果有人遇到这个老问题,并且想将 maxPendingRequests 设置增加到 6 以上(或使其更小),请参阅我最近提交给 typeahead 的维护分支的这个 PR 。

于 2016-03-07T19:22:42.497 回答