如何使用动态请求参数实现类似 Google 的自动完成?

How to implement Autocomplete like Google with dynamic request parameters?

我正在为表单字段使用 jQuery 插件 Autocomplete like Google foo:

$(function() {
    $("#foo").autocomplete({
        minLength: 3,
        limit: 5,
        source : [{
            url:"/my/ajax/controller/foo?data[name]=%QUERY%",
            type:'remote'
        }],  
    });
});

URI /my/ajax/controller/foo?data[name]=%QUERY% 调用数据库服务(执行像 SELECT * FROM foo WHERE name LIKE %name% 这样的语句),准备数据,并提供像 ['qwer', 'asdf', 'yxcv'].

这样的简单数组

现在我想为另一个字段添加自动完成功能 (bar)。区别在于,它需要 foocurrent 值进行过滤,因为目标 SQL 查询看起来像 SELECT * FROM bar WHERE number JOIN foo ON bar.foo_name = foo.name WHERE number LIKE %number% AND foo.name = foo_name。这是我如何尝试实现它的:

$(function() {
    $("#bar").autocomplete({
        minLength: 3,
        limit: 5,
        valueKey:'number',
        source : [{
            url:"/my/ajax/controller/bar?data[number]=%QUERY%&data[foo_name]=" + $('#foo').val(),
            type:'remote'
        }],  
    });
});

但是 foo 的值只被读取一次——当页面加载时。这意味着,更改和当前值将被忽略。我试图传递回调而不是 URL,但它没有用。

如何 "Autocomplete like Google" 使用动态变化的字段?

$(function() {
    $("#bar").autocomplete({
        minLength: 3,
        limit: 5,
        source : [
            function(q,add){
                $.getJSON("/my/ajax/controller/bar?data[number]=" + q + "&data[foo_name]=" + $('#foo').val(), function(resp) {
                    add(resp);
                })
        }],  
    });
});