Autocomplete 如何使用YUI3自动完成小部件处理远程数据源错误?

Autocomplete 如何使用YUI3自动完成小部件处理远程数据源错误?,autocomplete,error-handling,yui,yui3,Autocomplete,Error Handling,Yui,Yui3,当使用带有返回JSON数据的URL源的YUI3 Autocomplete小部件时,是否有一种简单的方法来检测HTTP错误响应 例如: Y.one('#ac-input').plug(Y.Plugin.AutoComplete, { resultHighlighter : 'phraseMatch', source : "http://example.com/api/item/search/?q={query}", }); (例如,如果用户尚未在该服务器上进行身份验证,则Auto

当使用带有返回JSON数据的URL源的YUI3 Autocomplete小部件时,是否有一种简单的方法来检测HTTP错误响应

例如:

Y.one('#ac-input').plug(Y.Plugin.AutoComplete, {
    resultHighlighter : 'phraseMatch',
    source : "http://example.com/api/item/search/?q={query}",
});
(例如,如果用户尚未在该服务器上进行身份验证,则Autocomplete小部件将收到401响应,并以静默方式失败,但会将错误记录到控制台。)

我已经搜索过了,但还没有找到与此问题相关的文档-源代码潜水也没有帮助。我想我必须滚动我自己的datasource对象,以便发出请求并检测错误

或者,对于这种类型的数据源,是否有更简单的方法将错误事件处理程序传递给YUI3 Autocomplete小部件

编辑:有关使用
Y.on('io:failure')的简单解决方案,请参阅
我认为这是传递错误处理程序的简单方法。您应该能够执行以下操作:

var ds = new Y.DataSource.IO({
  source: 'http://example.com/api/item/search/'
});

ds.set('ioConfig', {
    on: {
        failure: function (transactionID, ioResponseObj, args) {
            ...
        }
    }
};

Y.one('#ac-input').plug(Y.Plugin.AutoComplete, {
  requestTemplate: '?q={query}',
  source: ds
});
这是通过查看函数末尾的“apply”函数调用实现的


当然要注意这一点

一个简单的解决方案:使用全局IO故障事件处理程序。它的工作原理与中所述的
DataSource.IO
对象的复杂性无关

虽然我宁愿在AutoComplete小部件事件处理程序中本地处理错误,但遗憾的是,我还没有找到一种简单的方法来实现这一点

如果您只需要显示有关通信错误的信息,那么使用
Y.on('io:failure')
事件处理可能是一种更直接的方法

//
// Handle IO failure event
function ioFailureFunction(transaction, xhrObject) {
    errCode = xhrObject.status;
    // Insert the current error status into an HTML element...
    Y.one('#error').setContent(errCode);
};
Y.on('io:failure', ioFailureFunction);

基本原理:我发现使用中概述的DataSource.IO方法可能会带来很大的复杂性,因此如果您有简单的需求,此方法是方便的,并且可以与简单的自动完成配置一起工作——因此您可以保持自动完成配置的简单性,并且仍然可以处理IO错误…

Erm。。。好吧,这是可行的,但使用DataSource.IO方法可能会带来其他复杂性和问题。。。因此,虽然上述方法确实有效,但如果我只想记录或显示错误指示,我一直在寻找更简单的解决方案。注意。谢谢你的跟进。