jQuery自动完成超时

Ili*_*ans 4 javascript jquery jquery-ui jquery-autocomplete

出于某种原因,我在网站上制作的ajax请求在一半的时间内中止.当我为ajax请求设置超时时,这解决了,如下所示.

$.ajax({
    url: "/question/why_wont_it_work",
    timeout : 1000,
    success: function(){ /*do stuff*/ }
});
Run Code Online (Sandbox Code Playgroud)

遗憾的是,超时修复似乎不适用于jquery自动完成.我这样使用它:

$( "#questionTags" ).autocomplete({
    source: "/question/tags",
    timeout: 1000,
    select: function(event, ui) { /*do stuff*/ },
});
Run Code Online (Sandbox Code Playgroud)

我检查了网站上的jQueryUI文档,但也没有看到超时选项.现在这很烦人,因为有一半时间我的请求会中止,我不会得到我想要的结果.有没有解决的办法?

提前致谢.

And*_*ker 8

您可以为source参数提供任意函数.因此,您可以手动发出AJAX请求并指定timeout选项:

var xhr = null; /* To prevent multiple calls from happening while one is in progress */
$("#questionTags").autocomplete({
    source: function (request, response) {
        if (!xhr) {
            xhr = $.ajax({
                url: "/question/tags",
                timeout: 20000,
                data: request,
                dataType: "json",
                success: function (data) {
                     xhr = null;
                     response(data);
                },
                error: function () {
                    response([]);
                }
            });
        }
    },
    select: function(event, ui) { /*do stuff*/ },
});
Run Code Online (Sandbox Code Playgroud)

但是我和@ El Ronnoco在一起,你可能想要认真加快你的要求.20秒是很长的等待时间.