2

我正在尝试从 jQuery UI 自动完成调用中获取响应的 HTTP 状态代码,但我看不到任何方法。

$( "#site_search" ).autocomplete({source: '/members/search/suggest',
                                  select: function (event, ui) {
                                              var search = escape(ui.item.value);
                                              window.location = '/members/search/?q='+search;
                                          },
                                  response: function (event, ui) {
                                              console.log ($(this));
                                              console.log (ui);
                                              console.log (event);
                                          }
});

该网站的登录名会在一段时间不活动后过期。但是,如果有人在那个时候开始搜索,那么自动建议就需要很长时间。我想做的是读取状态代码,查看 401,然后禁用页面加载的自动完成功能。我知道如何做那部分(api 有一个启用/禁用切换),但我不知道如何取回状态代码,即使将事件和 ui 放入 console.log。

谢谢,汉斯

更新

这是在导致问题的几种情况下工作的最终版本。我很高兴。谢谢阿穆拉 - 很大的帮助。

// SITE SEARCH
if ($('input#site_search').length)
{
    $( "#site_search" ).autocomplete({
            source: function(request, response)
            {
                $.ajax(
                {
                    url: '/members/search/suggest',
                    dataType: 'json',
                    data: { term: request.term },
                    success: function(data, textStatus, jqXHR)
                    {
                        response(data);
                    },
                    error: function(jqXHR, textStatus, errorThrown)
                    {
                        if (textStatus == 'timeout')
                        {
                            $('input#site_search').autocomplete('disable');
                        }
                        // Handle errors here
                    },
                    timeout: 2000, // the SBWS login can slow things down, too
                    statusCode:
                    {
                        401: function ()
                        {
                            $('input#site_search').autocomplete('disable');
                        }
                    }
                });
            },
            select: function (event, ui)
            {
                var search = escape(ui.item.value);
                window.location = '/members/search/?q='+search;
            }
    });
}
4

1 回答 1

2

您需要定义源选项并使用$.ajax自己执行提交。然后使用 statusCode 选项处理您关心的状态代码:

$( "#site_search" ).autocomplete({
   source: function(request, response) {
       $.ajax({
         url: '/members/search/suggest',
         dataType: "json",
         data: { term: request.term },
         success: function(data, textStatus, jqXHR) {
             response(data);
         },
         error: function(jqXHR, textStatus, errorThrown) {
           // Handle errors here 
         },
         statusCode: {
           401: function () {
             // Disable autocomplete here
           }
         }
    });
});,

注意:您需要 jquery 1.5+ 才能工作。

于 2013-06-12T11:49:50.920 回答