2014-10-04 2 views
0

업로드가 완료된 후 스크립트는 파일 이름 ($ filename)을 구문 분석 스크립트로 전달합니다. 구문 분석 스크립트는 모든 ITEMS 파일을 포함하는 json 객체를 반환합니다.다른 스크립트를 차단하는 Ajax 비동기 호출

    $.ajax({ 
         url:'ajax/process-file.php', 
         type: "GET", 
         dataType:"json", 
         async:false, 
         data:{filename:'<?php echo $newFile ?>'} 
        }).success(function(data){ 
         jsonData=data; 
         maxRecords=jsonData.length; 
         $("#record-found").html(maxRecords); 
        }); 

개별 ITEM에 대해 다른 스크립트를 실행 중입니다.

     for(i=0;i<maxRecords;i++){ 
          //AJAX CALL FOR INDIVIDUAL RECORD 
          $.ajax({ 
           url:'ajax/save-single-planitem.php', 
           type: "POST", 
           async:false, 
           data:{item:jsonData[i]} 
          }).success(function(data){ 
           console.log(data); 
           //IF RECORD WAS SUCCESFULLY ADDED OR UPDATED 
           if(data['result']=="SUCCESS"){ 
            $("#records-success").html(successRecords++); 
           } 
           //IF RECORD WAS NOT ADDED 
           if(data['result']=="FAILED"){ 
            $("#records-failed").html(failedRecords++); 
           } 
          }); 
         } 

이제 문제는 Ajax 호출이 작은 부분

     maxRecords=jsonData.length; 
         $("#record-found").html(maxRecords); 

함께.

이렇게하면 모든 실행이 완료된 후에 변경됩니다. HTML을 변경하려는 다른 시도도 모든 호출이 완료된 후에 반영됩니다.

비동기 요청이 완료된 ajax 호출 후에 이미 코드를 삽입 해 보았습니다. 접근 방법이 완전히 엉망입니다.

jQuery를 /에 javscript 솔루션을 이해할 수있을 것이다. (추가 라이브러리 부하없이)

+1

동기식 (차단) Ajax 호출을 실제로 실행하고 있습니까? 왜? – jfriend00

+0

먼저해야 할 일이 있습니다. 추가 처리를 위해 레코드를 가져옵니다. 성공과 실패에 대한 올바른 가치를 얻는 두 번째. 왜냐하면 나는 사용자들에게 실패한 시도로 무엇을 할 것인지를 선택하게했기 때문이다. – Rohan210

+0

@ Rohan210이 경우 동기화 요청이 필요하지 않습니다. –

답변

0

당신은 정말 요청 비동기를 만들려고합니다. 그렇지 않으면 코드에 setTimeout(makeAnotherRequest, 0) 해킹을 도입해야합니다.

이렇게하면 "아약스 웨이"를 수행 할 수 있습니다.

function getAll(fileName) { 
    return $.get('ajax/process-file.php', {filename: fileName});  
} 

function getItem(item) { 
    return $.post('ajax/save-single-planitem.php', item); 
} 

var succeeded = 0, failed = 0; 

getAll('<?php echo $newFile ?>') 
.done(function(items) { 
     $("#record-found").html(items.length); 
}) 
.done(function(items) { 
    items.forEach(function(item) { 
     getItem(item).done(function(result) { 
      if(result.result === 'SUCCESS') $("#records-success").html(succeeded++); 
      if(result.result === 'FAILED') $("#records-failed").html(failed); 
     }); 
    }); 
}); 
+0

setTimeout (function(), 6000)을 추가하려고했습니다. HTML을 업데이트하기 전에 첫 번째 아약스 호출 이후. 일하지 않았어. 이것을 시도하고 다시 돌아올 것입니다. – Rohan210

+0

@ Rohan210 UI 스레드에서 BTW 차단 요청은 실제로 사용되지 않습니다. –

+0

나는 당신이 제안한 방법을 사용해 보았습니다. forEach (??)는 오류를 발생시킵니다. Uncaught TypeError : undefined is not function .. getAll ('')에 여러 done()을 사용한 이유도 있습니다. – Rohan210

관련 문제