2014-02-14 4 views
1

을 반환하지 : Chain tasks.체인화 JQuery와 deferred.then() 나는 JQuery와 deferred.then에서() 문서 샘플 코드를 찍은 적절한 약속

내가 찾은 문제chained.done 핸들러입니다, 모든 요구가 끝나면 내가 이해하는 것으로부터 전화해야합니다. 대신 첫 번째 요청이 완료되면 처리기가 실행되고이 요청에서 페이로드가 검색됩니다.

var request = $.ajax("http://www.json-generator.com/j/bPyGnSXXTm", { 
    dataType: "json", 
    crossDomain: true 
}), 
    chained = request.then(function (data) { 
     console.log('First call, data:', data); 
     $('body').append('<p>' + 'First call, data: ' + JSON.stringify(data) + '</p>'); 
     return $.ajax(data[0].url, { 
      crossDomain: true 
     }); 
    }); 

chained.done(function (data) { 
    // data retrieved from url2 as provided by the first request 
    console.log('Second call, data:', data); 
    $('body').append('<p>' + 'Second call, data: ' + JSON.stringify(data) + '</p>'); 
}); 

당신은 jsfiddle here을 찾을 수 있습니다

내가 사용하고 코드입니다.

또한 콘솔을 열어 두 번째 요청 (처리기 XMLHttpRequests 활성화) 전에 처리기가 실행되고 있는지 확인할 수 있습니다.

내 이해에 따라 chainedrequest의 값을 얻고 있으며 $.ajax의 값은 반환하지 않습니다. jQuery를 사용

+1

은 여전히 ​​첫 번째 호출 –

+0

@A입니다 .wolff 내 코드가 jquey 문서에서 복제했는데, 변수'chained'가 request.then 함수에 할당되었습니다. 아마 여러분의 의견을 이해할 수 없을 것입니다 ... 조금 더 자세히 설명해 주시겠습니까? 고맙습니다! –

+1

좋아, 'then'은 jQuery 1.8.x (?) 이전에 버그가있었습니다. AFAIK, jQuery를 1.8로 업그레이드하거나 then() 파이프 대신 pipe()를 사용해야합니다. http://jsfiddle.net/nGthY/2/또는 jQuery 1.8 http://jsfiddle.net/nGthY/3/ –

답변

1

이전 1.8에, 당신은 then() 대신 .pipe()를 사용해야합니다 :

chained = request.pipe(function (data) {...}); 
버전 사이의 변화에 ​​대한

참조 DOC : 체인 코드에서 http://api.jquery.com/deferred.then