0

我有一个主要基于本教程的自动完成实现:http: //viralpatel.net/blogs/tutorial-create-autocomplete-feature-with-java-jsp-jquery

然而,与文章相反,我从数据库中获取记录并在 jsp 中使用 out.println(recordValue); 打印出来。这个jsp被称为:

    <input type="text" id="country" name="country"/>
    <script>
        $("#country").autocomplete("getdata.jsp");
    </script>

这些记录来自包含数百万条记录的表,因此我只放置我用“rowNum < 10;”过滤的前 10 条记录。

这对普通数据非常有用。当查询返回的记录超过 10 条时,问题就出现了,并且可能还有更多记录……例如,假设我有如下数据:Test10,Test11,Test12,Test13,Test14,Test15,Test16,Test17,Test18,Test19,Test20假设我们在键入 Test 后最初进行查询以获取记录,并返回从 Test10 到 Test19 的第 10 条记录 - 这是正确的。但是现在当用户键入 Test2 时,我们应该再次查询后端,但这对我来说没有发生......</p>

如前所述,返回所有记录根本不是一种选择,因为可能有数百万条记录。但是当输入一个新字符时(比如在输入 Test 后输入 2),我们需要回到上面脚本中调用的 jsp 内的服务器,以便调用 getData。

有没有办法解决这个问题?

我已经尝试过改成这个,但是没有用

    <input type="text" id="country" name="country"/>
    <script>
            $("#country").autocomplete({
                    change: "getdata.jsp"
            });
    </script>

谢谢!


由于我无法在没有 50 个代表的情况下添加评论,因此编辑问题以回复 @Barmar ...

感谢您的回复@Barmar。我确实尝试过在 Firefox 和私有模式下禁用缓存,所以希望它不会记住任何东西。但我仍然看到相同的行为

为了进一步调试,我在 jquery.autocomplete.js 中添加了一个警报,似乎该函数确实在按键时被调用,但它仍然不会将请求传播到后端的服务器端。似乎javascript正在吞噬请求,或者可能有一些逻辑决定是否将请求发送到服务器。我正在进一步研究这个问题。

但是,看起来很奇怪的是像 jquery 这样的标准产品可能有问题,所以也许我缺少一些设置/配置。但我还没有弄清楚,那可能是什么。

任何帮助表示赞赏!

4

1 回答 1

1

找到了解决这个问题的方法。

jQuery 自动完成 javascript(我们拥有的版本)正在缓存第一个查询返回的值,如果缓存中的任何值与输入的字符串匹配,则不会返回后端。

刚开始在keydown上刷新缓存,就解决了问题。

于 2012-07-27T19:32:23.620 回答