jQuery UI AutoComplete插件 - 问题

时间:2011-01-27 23:36:59

标签: asp.net-mvc ajax jquery jquery-ui-autocomplete

我有一个ASP.NET MVC 3 Web应用程序(Razor),以及一个带有jQuery UI AutoComplete插件的特定视图(v1.8)。

这是我目前的设置:

$('#query').autocomplete({
        source: function (request, response) {
            $.ajax({
                url: "/Search/FindLocations",
                type: "POST",
                dataType: "json",
                data: { searchText: request.term },
                success: function (data) {
                    response($.map(data, function (item) {
                        return { name: item.id, value: item.name, type: item.type }
                    }))
                },
                error: function (xmlHttpRequest, textStatus, errorThrown) {
                    // don't know what i should do here...
                }
            })
        },
        select: function (event, ui) {
            $.get('/Search/RenderLocation', { id: ui.item.name }, function (data) {
                $('#location-info').html(data);
            });
        },
        delay: 300, minLength: 3
    });

自动完成功能会返回世界上的位置,与Google地图自动完成基本相同。

以下是我的问题:

1) delayminLength的推荐设置是什么?保留默认值?

2)我考虑将[OutputCache]放在Controller操作上,但我看起来好像插件会自动进行缓存?这是如何运作的?它是否将结果存储在cookie中?如果是的话什么时候到期?是否建议使用其他缓存?

3)我注意到如果我输入了某些内容,并且在AJAX请求被触发时,如果我输入其他内容,则对话框会暂时显示第一个结果,然后显示第二个结果。我可以理解为什么,但它让用户感到困惑(考虑到AJAX请求可能需要1-2秒),但我正考虑在async: false选项中使用$.ajax来防止多个请求 - 这是糟糕的设计/用户体验?

4)您是否可以针对我的上述设置推荐任何其他更改,以提高性能/可用性?

1 个答案:

答案 0 :(得分:0)

1)这实际上取决于您的使用情况和数据。

2)你应该使用[OutputCache]。如果插件上发生了任何缓存,那么它只适用于每个用户,如果您在控制器操作级别使用缓存,它将为所有用户缓存一个缓存。 (再次,根据您的使用情况,这可能实际上很糟糕,但通常这样做很好)

3)由于缺乏背景,这个问题也很难。如果ajax请求是1-2秒并且没有办法让它变短,那么你真的应该是一个非常大的延迟,这样用户在键入一个长单词时就不会发出很多请求(如果它们输入很慢)。 / p>

4)听起来你需要查看/ search / FindLocations方法,看看你可以在哪里进行缓存或pref改进。请在这里查看您的代码,我可以尝试提供更多建议。