2013-06-11 60 views
2

我想从jQuery UI自动完成调用中获取响应的HTTP状态代码,但我看不到任何方式来这样做。从jQueryui自动完成调用获取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中也是如此。

感谢, 汉斯

UPDATE

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

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

回答

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+这个工作。

+0

啊,非常好。我会放弃并报告。 – Hans

+0

我从来没有做过报告,直到现在,仅供参考,这工作像一个魅力。谢谢。 – Hans