문제

3 초마다 프로세스 상태를 얻기 위해 AJAX 사후 요청을합니다. 이것은 훌륭합니다.

프로세스가 100%에 도달하면 호출 기능이 실행 (아래 표시)을 실행하여 페이지에 새 요소를 추가 한 다음 3 초마다 진행 상황을 지속적으로 얻는 데 사용하는 설정 타임 아웃 방법을 취소합니다. 그러나 사용자에 의해 때때로 취소하지 못하고 새 요소가 페이지에 추가되지 않았으며 "100%"를 표시하는 데 갇혀 있다고 들었습니다.

나는 이것을 반복해서 테스트했으며 결코 나를 위해 갇히지 않습니다. 코드도 괜찮아 보이지만 내 JavaScript 기술이 크지 않아서이 문제가 발생할 가능성이 있는지 지적 할 수 있기를 바랐습니까?

나는 코드를 언급했다. 나는 그것을 줄이려고 노력했다.

function convertNow(validURL){

    startTime = setTimeout('getStatus();', 6000); 
       //AJAX CALL TO RUN PROCESS
       $.ajax({
       type: "GET",
       url: "main.php",
       data: 'url=' + validURL + '&filename=' + fileNameTxt,
       success: function(msg){
       //ON SUCCESS CLEAR SETTIMEOUT AND SHOW ELEMENTS (text)
       clearTimeout(continueTime);
       clearTimeout(startTime);    
        $("#loading").hide("slow");
        $("#done").html("Done");   
       }//function

     });//ajax

}//function convertNow

function getStatus(){
        //AJAX CALL TO GET STATUS OF PROCESS
        $.ajax({
        type: "POST",
        url: "fileReader.php",
        data: 'textFile=' + fileNameTxt,
        success: function(respomse){
        textFileResponse = respomse.split(" ");
        $("#done").html("Processing...");
        }
        });//ajax
        clearTimeout(continueTime);

        if(textFileResponse[0]=='100.0%'){
            clearTimeout(continueTime);
        }
        else{
            clearTimeout(startTime);
            continueTime = setTimeout('getStatus();', 3000); 
        }
}
도움이 되었습니까?

해결책

일부 가장자리 케이스에서는 TextFilerEponse [0] == '100.0%'에 구문 분석 오류가있을 수 있으며, 응답의 값은 정확히 100.0%와 같지 않습니다 (아마도 추가 흰색 스페이스가 있거나 일부 플랫폼에는 약간의 차이가있을 수 있습니다. 등...). 이로 인해 코드가 else {} 블록으로 떨어지고 GetStatus 함수가 다시 대기됩니다.

편집 : 주석의 스레드가 주어지면 Ajax 코드의 두 블록 사이에 레이스 조건이있을 가능성도 동일합니다. (독자의 이익을 위해 이것을 여기에 두십시오). 최종 편집

그러나 구문 분석을 해결하는 것 외에도 원하는 것은 시작 시간과 연속 타임 타이머 대신 하나의 타이머 만 사용하여 setInterval ()을 사용하는 것입니다. Settimeout은 한 번만 실행되는 반면 SetInterval은 x 밀리 초마다 반복되므로 하나만 필요합니다. setInterval을 취소하려면 ClearInterval을 사용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top