我试图从 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/