2013-06-10 1 views
2

순차적으로 실행해야하지만 일련의 아약스 호출은 동 기적으로 실행하지 않아도됩니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?일련의 아약스 호출 연결하기

나는 당신이 $.when().then() 일 수 있지만 2 개의 ajax 호출에서만 작동한다는 것을 알고 있습니까? 그냥 같이 그들을 모두 '체인의'then에 일련의 압정, 즉

var caller; 
for (var i = 0; i < argObjects.length; i++) { 
    if (typeof caller === 'undefined') { 
     caller = $.when($.ajax(... data: argObjects[i]...)); 
    } 
    else { 
     caller.then($.ajax(... data: argObjects[i]...)); 
    } 
} 

: 이상적으로, 내가 좋아하는 뭔가를하고 싶네요. 그러나 이것은 불가능합니다. jQuery로 할 수있는 또 다른 방법이 있습니까?

이러한 호출은 동시에 실행할 수 없습니다. 나는 async: false 세트로 루프를 돌릴 수는 있지만, 좋지 않은 것을 처리하는 동안에는 사용자가 제어 할 수 없다.

하나의 호출로 모든 것을 전송하는 것이 대체 방법 일 수 있습니다.하지만 실행되는 동안 해당 작업의 진행 상태를 어떻게 모니터링합니까? 업데이트 할 데이터가 10 주 있다고 가정 할 때마다 매주 완료 ​​될 때 알림을 받고 싶습니다. 내가 순차적으로 10 건의 아약스 호출을 보냈다면, 각각이 돌아와서 그것이 완료되었다고 말할 수 있고, 나는 어떤 종류의 진행 바를 업데이트 할 수있다. 여기는 궁극적 인 목표입니다.

나는 그동안 jQuery에서 지연된 문제를 해결하기 위해 계속 노력할 것입니다.

+0

중간에 실패한 경우 나머지 요청을 계속 실행 하시겠습니까? – Dogbert

+0

참조 : http://stackoverflow.com/questions/13250746/process-chain-of-functions-without-ui-block/13252018#13252018 – slebetman

+0

@ 도그 버트 : 아니오, 그렇지 않을 것입니다. '성공'에서 전화를 묶는 것은 그것을 막는 것처럼 보일 것입니다. – Depressio

답변

2

당신은 어느 실행중인 요청할 추적하기 위해 다음 아약스 호출을 실행하고 단지 카운터를 사용하는 것이 성공 핸들러를 사용하여 다른 접근 방식을 취할 수

var i = 0; 
function run() { 
    $.ajax(... data: argObjects[i]..., function() { 
     i++; 
     if (i < argObjects.length) { 
      run(); 
     } 
    }); 
} 
run(); 
+0

아, 피 묻은 재귀. 내가 왜 그렇게 생각하지 않았어? 내가 뭔가를 채찍질하고 트릭을하는지 봅시다. – Depressio

+0

@Depressio - 실제로 기술적으로 재귀가 아닙니다 (보기에는 다소 비슷합니다). 'run()'의 첫 번째 호출은 성공 핸들러가 호출되기 전에 실제로 완료되기 때문에 run()의 다음 실행이 시작되기 전에 완료됩니다. – jfriend00

+0

참. 콜백은 약간 다릅니다. 그것은 확실히 비슷하게 보입니다. 어쨌든, 나는 총을줬고 그것은 잘 작동했다. 나는 지연 연쇄를 사용해서 너무 멋지려고 노력했다. :) – Depressio

1

순차적 아약스 호출의 경우 첫 번째 아약스 성공 내에서 다른 아약스를 호출합니다. 이처럼

: -

function ajax1(){ 
    $.ajax({ 
    url: "", 
    data: dataString, 
    type: "POST" , 
    dataType: "text", 
    cache: false, 
    success: function(response_data){ 
     ajax2(); // call second ajax on success 
    } 
    }); 
} 

function ajax2(){ 
    $.ajax({ 
    url: "", 
    data: dataString, 
    type: "POST" , 
    dataType: "text", 
    cache: false, 
    success: function(response_data){ 

    } 
    }); 
} 
+1

함수를 배열에 저장하면 쉽게 일반화 할 수 있습니다. 유사한 내용은 http://stackoverflow.com/questions/13250746/process-chain-of-functions-without-ui-block/13252018#13252018을 참조하십시오. – slebetman