1

私はdeferredAPIを理解しようとしており、この素敵なサンプルコードをTwitter検索APIと一緒に使用しています:

var getTweets = function(q) {
    return $.ajax({
        url: 'http://search.twitter.com/search.json?q=' + encodeURIComponent(q),
        dataType: 'jsonp'
    })
};

var getTheDay = function(date){
    var date = new Date(date);
    return date.getDay();
}

var parseTweetData = function(data){
    $.each(data.results, function(index, tweet){
        console.log(tweet.text 
        + ' from ' + tweet.from_user_name 
        + ' at ' + getTheDay(Date.parse(tweet.created_at) * 1000));
    });
}

var parseError = function(error, xhr) {
    alert('failed')
};

$.when(getTweets(' martin')).then(parseTweetData, parseError);

結果を返すことは問題ありません。問題は、twitter が403 エラーを返す状況で発生します。

カスタムエラーハンドラーでそのエラーを処理したいのですが、まったくトリガーされていないようです。私は何を間違っていますか?APIを誤解していますか?適切な ajax エラー ハンドラ リクエストを作成するにはどうすればよいですか?

4

1 に答える 1

3

$.ajax docs によると、エラーハンドラーはjsonpリクエストに対して呼び出されないため、おそらく遅延も呼び出されません。

error
タイプ: Function( jqXHR jqXHR, String textStatus, String errorThrown )
リクエストが失敗した場合に呼び出される関数。この関数は 3 つの引数を受け取ります。jqXHR (jQuery 1.4.x では XMLHttpRequest) オブジェクト、発生したエラーの種類を説明する文字列、およびオプションの例外オブジェクト (発生した場合) です。2 番目の引数 (null 以外) に指定できる値は、"timeout"、"error"、"abort"、および "parsererror" です。HTTP エラーが発生すると、errorThrown は「Not Found」や「Internal Server Error」などの HTTP ステータスのテキスト部分を受け取ります。jQuery 1.5 以降、エラー設定は関数の配列を受け入れることができます。各関数が順番に呼び出されます。注: このハンドラは、クロスドメイン スクリプトおよび JSONP リクエストでは呼び出されません。

タイムアウトを使用してエラー コールバックをトリガーすることができます。そのため、基本的にはリクエストに一定の時間を与え、時間が経過するとリクエストが失敗したと見なします。

$.ajax({
    url: 'http://search.twitter.com/search.json?q=' + encodeURIComponent(q),
    dataType: 'jsonp',
    timeout: 5000 /* 5 seconds timeout, plenty of time for the request to complete */
})
于 2013-02-18T16:45:04.130 に答える