2012-04-03 2 views
2

JSONデータを返すURLソースでYUI3オートコンプリートウィジェットを使用すると、HTTPエラー応答を簡単に検出できますか?YUI3オートコンプリートウィジェットでリモートデータソースエラーを処理するにはどうすればよいですか?

例:

Y.one('#ac-input').plug(Y.Plugin.AutoComplete, { 
    resultHighlighter : 'phraseMatch', 
    source : "http://example.com/api/item/search/?q={query}", 
}); 

(ユーザがそのサーバ上で認証されなかった場合、例えば、オートコンプリートウィジェット401応答を受信し、サイレント失敗が、コンソールにエラーを記録します。)

私は検索しましたが、この問題に固有のドキュメントが見つかりませんでした。ソースダイビングは役に立たなかった。私考える私は要求を発行し、エラーを検出できるように私自身のデータソースオブジェクトをロールバックする必要があります。

または、このタイプのデータソースのYUI3オートコンプリートウィジェットにエラーイベントハンドラを渡す簡単な方法はありますか?

編集Y.on('io:failure')を使用してシンプルなソリューションのためのmy follow-up answerを参照してください。

答えて

1

単純な解決策:グローバルIO失敗イベントハンドラを使用します。 this answerに記載されているように、DataSource.IOオブジェクトの複雑さなしで動作します。

オートコンプリートウィジェットのイベントハンドラでエラーをローカルで処理するのは良いことですが、単純な方法はありませんでした。

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

理由:私はあなたが単純なニーズを持っている場合、このメソッドは好都合であると簡単なオートコンプリートの設定で動作しますので、this answerで概説しDataSource.IOメソッドを使用すると、重大な複雑さを導入することができることを発見しました - ので、オートコンプリートの設定を単純にしておけば、IOエラーを処理することができます...

+1

よろしくお願いします。フォローアップありがとう。 – mjhm

1

私はY.DataSourceがエラーハンドラを渡す簡単な方法だと思います。これはfailureHandlerの最後に「適用」関数呼び出しを見ているからである

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

:あなたのような何かを行うことができるはず。

もちろん、Same Origin policiesが適用されます。

+0

これは完璧に機能しました!ありがとう。 – Inactivist

+0

Erm ...うーん、うまくいきますが、DataSource.IOメソッドを使用すると、他の複雑さや問題が発生する可能性があります...上記のメソッドが実際に動作しますが、私がやりたいことならば簡単なソリューションを探していましたログであるか、エラー表示を表示します。 – Inactivist

関連する問題