2011-09-13 10 views
2

fancyParse은 서버가 반환 한 응답을 다른 것으로 변환하는 기능을 가지고 있다고 가정합니다. 이 함수는 응답이 아무런 의미가 없거나 특별한 "내부 오류"플래그가 설정된 경우에 발생합니다.jQuery ajax 요청의 결과를 후 처리하는 가장 간단한 방법은 무엇입니까?

이 함수를 $.post 호출에 연결하여 새 Deferred을 얻고 싶습니다. 요청이 실패하거나 fancyParse이 throw되면이 새로운 지연이 실패합니다. 요청이 성공하고 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했습니다. 나는 내가 마음에 가지고있는 다른 것에 이것을 사용할 것이라고 생각하지만, postprocess 일을 위해서'dataFilter'는 완벽합니다. –

+0

예,이 경우 datafilter는 지연된 것보다 짧아야합니다. 그러나 일부 어플리케이션에서는 지연이 매우 편리 할 수 ​​있습니다. 고마워. –

관련 문제