2014-12-03 5 views
-1

javascript/jquery/ajax 실행 중에 텍스트 업데이트를 가져올 수없는 이유에 대해 혼란 스럽습니다..innerHtml 텍스트가 스크립트 실행 중 업데이트 됨

다음 코드가 있습니다.

$("#updates").html("Collecting your team names."); 
YourTeamFirst(YourTeam, TeamValue); 

$("#updates").html("Collecting their team names."); 
TheirTeamNext(TheirTeam, TeamValue); 

$("#updates").html("Gathering ID's."); 
setNames(TeamValue); 

$("#updates").html("Setting Details."); 
setChampRatios(TeamValue); 

$("#updates").html("Setting Ratios."); 
setChampKDRS(TeamValue); 

$("#updates").html("Finished!"); 

예 함수 (발생만을 AJAX 함수 호출 및 텍스트 업데이트 실제는 일반 JS 함수 해당 없음 AJAX에, 서브 함수에 ...)

function TheirTeamNext(TheirTeam, TeamValue) { 
     $.ajax({ 
      url: "/PlayerLookUp/TheirRankedData", 
      type: "POST", 
      data: "IDList=" + T[i], 
      dataType: "json", 
      async: false, 
      success: function (resp) { 
        //just boring logic 
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
       if (XMLHttpRequest.status == 0) { 
         alert("Issue with reaching Riot API server. Pleast contact an Admin."); 
       } 
      } 
     });  
} 

유일한 것은 "완료되었습니다"(스크립트가 완료된 후) 왜 다른 것이 전혀 나타나지 않는 것입니까? 실행은 약 10 초가 걸리므로 다른 업데이트가 innerHtml/Html에 나타나야합니다. 나는 또한 document.getElementById("updates").innerHTML = ...을 사용하여 시도해 보았습니다. 또한 완료된 텍스트가 "Finished"텍스트로 표시 될 때 아무 것도 보여주지 않습니다.

각 함수는 JQuery, Ajax 또는 javascript이고 C# 컨트롤러에서 몇 개 앞뒤로 나뉘어 있습니다. 그러나 내가 인식하지 못하는 스크립트가 없으면 텍스트 업데이트가 여전히 innerHtml 텍스트를 업데이트해야합니다. innerHtml/Html ... 어스에서 가장 최근 텍스트 업데이트가 표시됩니다. alert() 그렇다면 경고 중단이나 스크립트 실행 종료로 인해 내 텍스트가 업데이트/게시됩니다. 내 사용자가 스크립트 사용시 업데이트 된 메시지를 보길 바랍니다.

+2

우리가하고있는 모든 것을 볼 수 있도록 완전한 코드 예제를 게시하십시오. 확률은 모든 .html() 문이 실행 중이지만 마지막 업데이트를보기에는 너무 빨리 나타납니다. 다시 말하지만, 코드 없이는 말할 수있는 카드이지만, 경고가 작동하고 경고가 차단되었다고 말한 이후로 내 추측입니다. – j08691

+0

@ j08691 문제가 "전파"와 같은 경우, 약 10 초 정도 걸립니다. 제 3 자 API 호출만으로는 1 ~ 2 초가 걸리고 지금까지 약 20 개는 수행하고 있습니다. – Austin

+0

브라우저의 UI, 즉'html()'메소드 호출과 sync ajax 호출을 차단하기 전에 강제로 UI를 다시 그려야합니다. 그것은 매우 불투명 한 질문입니다. –

답변

2

왜냐하면 ajax가 비동기 적으로 실행되기 때문입니다.

텍스트가 표시되도록하려면 아약스 함수에서 콜백을 사용해야합니다.

업데이트 : 당신이 async: false이 동작을 사용하고 있기 때문에 정말 이상한 것 같다,하지만 난 정확히 경우 synchronous 통화를 처리하는 방법을 자바 스크립트와 JQuery와 모른다.

하나의 핫픽스 제안은 여전히 ​​함수에 콜백을 추가하는 것입니다. (참고 :. 이 매우 지저분 해결하고 당신이 문제를 hotfixing 도움이) 함수 호출에서 다음

function YourTeamFirst(YourTeam, TeamValue, callback) { 
    /* ... */ 
    $.ajax({ 
     /* ... */ 
     success: function (resp) { 
      /* ... */ 
      callback(); 
     } 
    }); 
} 

는 콜백 매개 변수로 익명 함수를 추가합니다. 이 함수의 본문에 다음 함수가 실행될 때 항상 .html()을 추가하십시오.

$("#updates").html("Collecting your team names."); 

YourTeamFirst(YourTeam, TeamValue, function() { 
    $("#updates").html("Collecting their team names."); 
}); 

TheirTeamNext(TheirTeam, TeamValue, function() { 
    $("#updates").html("Gathering ID's."); 
}); 
/* ... */ 
+0

모든 ajax 함수를 async : false로 설정했습니다. 그리고이 문장은 아약스의 바깥에 있고, 아약스는'setNames (TeamValue);의 함수 내 에서처럼 위에 표시된 텍스트 옆에 나타나는 함수 안에서만 발생합니다 (또는 중요하지 않나요?). – Austin

+0

@Austin'모든 아약스 함수를 비동기로 설정했습니다 : false'이 문을 질문 자체에 넣지 않으시겠습니까 ??? –

+0

@Austin 코드를 더 이상 보지 않아도됩니다. 자세한 내용은 말할 수 없습니다. –