page_adsence

2012年3月14日水曜日

JsonpでAjax通信時にネットワーク系のエラーが発生した際のエラーハンドリング

Twitterからタイムラインを取得してきて、表示するという単純な処理を書いていたのですが、
IP別に1時間のリクエスト数が150を超えると400 Bad Requestとなってしまうため、
callback関数が呼ばれずに処理が途中で終了してしまうという現象に遭遇した。

てっきりJSONPの場合もerrorとかの関数も呼ばれていると思っていたのですが、そうではない様子。
試しにerrorとか書いてみても全く反応なし・・・。

調べてみたらどうやらJSONPの場合はsuccessとcomplete以外はコールされないらしい。
とりあえずググってみたら、案の定出てきました。

「jquery.jsonp.js」

これを使えば普通にエラーハンドリングができそうです。

$.jsonp({
    url: "http://hoge.jp/",
    callback: "callback_function_name",
    success: function(json) {
       // This will be called in case of success no matter the callback name
    },
    error: function() {
       // This will be called in case of error no matter the callback name
    }
});