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



我正试图从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控制台日志。

谢谢,汉斯

这是在导致问题的几个场景下工作的最终版本。我很高兴。谢谢Amurra -很大的帮助。

// 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;
            }
    });
}

您需要定义源选项并使用$.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
           }
         }
    });
});,

最新更新