jquery - 从 jQueryui Autocomplete 调用获取 HTTP 状态代码

标签 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;
            }
    });
}

最佳答案

您需要定义源选项并使用 $.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+ 才能正常工作。

关于jquery - 从 jQueryui Autocomplete 调用获取 HTTP 状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17049139/

相关文章:

jquery - JQuery UI 选项卡内容面板的高度

javascript - 如何让 jquery-ui-dialog 没有关闭按钮?

javascript - 自动完成文本框简单方法

javascript - JQuery 和修改后的自动完成

java - 非法状态异常 : getOutputStream() has already been called for this response

javascript - 我的子菜单未在 safari 中显示,但在 chrome 和 firefox 中显示

javascript - 循环数组数据

jquery - 如果选项尚不存在,如何从搜索中将选项添加到引导选择?

c# - 脚本没有连接到 JsonResult Controller

javascript - 如何创建一个没有绝对位置的简单 jQuery 图像 slider