我正试图从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
}
}
});
});,