2011-09-13 6 views
2

サーバから返された応答を受け取り、何かに変換することを意図した関数fancyParseがあるとします。この関数は、応答が何も意味を持たない場合、または特別な「内部エラー」フラグが設定されている場合にスローします。jQueryのajaxリクエストの結果を後処理する最も簡単な方法は?

この機能を$.postコールにチェーンして、新しいDeferredを取得したいとします。この新しい遅延は、要求が失敗した場合、またはfancyParseがスローした場合に失敗します。要求が成功し、fancyParseが成功すれば成功し、重要なことは、fancyParseの結果を成功のコールバックに渡すことです。

完璧なソリューションは、このようなものになります。

$.post('/url', etc).postprocess(fancyParse) 
    .done(my_done_handler) 
    .fail(my_fail_handler); 

はすでに利用可能な、このようなものですか、私はそのようなpostprocessを自分で書く必要があるのですか?

答えて

2

dataFilter機能は、データを処理するために使用することができます。あなたはあなたの要求と共にそれを渡します。フィルタ機能で例外を実行します。

http://api.jquery.com/jQuery.ajax/

$.ajax({ 
    ..., 
    dataFilter: function (data, type) { 
     // do something with data and return it 
     return data.toLowerCase(); 
    } 
}) 
+0

を、おそらくあなたが知っています要求は失敗として扱われますか? –

+0

申し訳ありませんが、わかりません。しかし、例外をキャッチして、ポストプロセッサー内からエラーハンドラーを呼び出すのはなぜですか? – jbasko

+0

エラーハンドラを呼び出すよりも多くのことがあるので。私は 'Deferred'も* rejected *にする必要がありますので、後で追加されたエラーハンドラも呼び出されます。 –

4

あなたが所有して繰延オブジェクトを作成することができます:ドキュメントがこれを述べるいない

$.postProcess = function(addr,test) { 
    var dfd = $.Deferred();   // create deferred object 
    $.post(addr)     // make ajax call 
    .success(function(response) { // if ajax is OK 
    if (test) {     // Your filter test 
     dfd.resolve("OK");   // if test is passed, call done() 
    } else { 
     dfd.reject("Bad test");  // otherwise call reject 
    } 
    }) 
    .error(function() {    // on ajax error 
    dfd.reject("Error");   // reject 
    }); 
    return dfd.promise();      // return deferred object 
}; 

//$.postProcess('/echo/json/',true) // to test good case 
//$.postProcess('/echo/json/',false) // to test bad test 
$.postProcess('/echo/error/',true) // to test bad ajax 
.done(function(msg){ 
    alert('ok:'+msg); 
}) 
.fail(function(msg){ 
    alert('fail:'+msg); 
}); 

http://jsfiddle.net/bouillard/FRsjV/

+0

努力してくれてありがとう、私はこれを+1しました。私はこれを他の何かのために使うつもりだと思いますが、後処理のために 'dataFilter'は完璧です。 –

+0

はい、この場合、datafilterは遅延されるよりも短くなければなりません。しかし、延期は、いくつかのアプリケーションにとって非常に便利な方法です。どうも。 –

関連する問題