从jQueryui自动完成调用获取HTTP状态代码

时间:2013-06-11 16:25:31

标签: jquery jquery-ui jquery-ui-autocomplete

我正在尝试从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;
            }
    });
}

1 个答案:

答案 0 :(得分: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+才能使用。