2

fancyParseサーバーから返された応答を受け取り、それを別のものに変換することを目的とした関数があるとします。この関数は、応答がまったく意味をなさない場合、または特別な「内部エラー」フラグが設定されている場合にスローされます。

$.postこの関数を呼び出しにチェーンして、新しいを取得したいと思いDeferredます。この新しい遅延は、要求が失敗した場合、またはfancyParseスローされた場合に失敗します。リクエストが成功して成功した場合は成功fancyParseし、重要なことに、結果をfancyParse成功コールバックに渡します。

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

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

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

4

2 に答える 2

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/

于 2011-09-14T12:15:19.987 に答える
3

dataFilter関数を使用してデータを処理できます。あなたはあなたの要求でそれを渡します。

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

$.ajax({
    ...,
    dataFilter: function (data, type) {
        // do something with data and return it
        return data.toLowerCase();
    }
})
于 2011-09-13T18:34:32.053 に答える