2013-05-30 3 views
0

수 백 줄의 JS 기능이 있습니다. 이전 호출을 실행하기 전에 함수가 다시 호출되지 않도록해야합니다.끝나기 전에 다시 실행하는 기능

var executing = false;  
function myFunc(){ 
    //stop executing if it's already executing 
    if(executing){ 
     return false; 
    } 
    executing = true; 
    /* the main function with ajax-calls etc */ 
    $.ajax({ 
     type: "POST", 
     url: "/"+method+action, 
     data: "a=1", 
     success: function(data){ 
     //the inner function logic... 
     executing = false; 
     } 
} 

합니까 당신에게 거짓보고한다 :

그래서 나는이 시도? 내 결함은 어디에 있습니까? 어쩌면 오류는 게시되지 않은 코드의 다른 곳에서 발생합니다. 의견을 보내 주셔서 감사합니다!

+2

제공되는 조각은 * "작동합니다." 그러나 고려해야 할 몇 가지 경우 : 1. 뭔가 다른 '실행'을 변경합니다 (AJAX 호출이 완료되기 전에 다른 이벤트가 트리거 될 수 있음을 기억하십시오). 또한'execution'은 더 큰 범위에서 쓸모없는 일반적인 이름입니다; 2) AJAX 호출이 실패하면 어떻게됩니까?; 3) 큐잉? 4) * 구문 오류를 수정합니다 (예를 들어 닫는')'). – user2246674

+0

감사합니다. "실행 중"을 변경하는 것은 없습니다. 아약스 호출이 실패하면 항목이 추가되지 않기 때문에 아무런 문제가 없습니다 (끝없는 스크롤에서 항목을 더 많이로드 할 때 사용합니다). 큐잉? 조금 더 설명해 주시겠습니까? –

+1

다음 요청을 삭제하고 싶지는 않을 것입니다. 사용자가 자동 ​​완성 기능을 수행하고 X 입력 (AJAX 호출 시작)을 한 다음 XY로 XY (실로 폰)로 정제 된 단어를 표시하고 싶다고 가정합니다. 뿐만 아니라 X (제논). 이 간단한 예제를 처리하는 간단한 방법은 뛰어난 XHR 호출을 취소하는 것입니다. XHR 객체를 별도의 bool 대신에 센티넬으로 사용하는 것이 좋습니다. – user2246674

답변

0

봅니다 JQuery와 ajax에 대한 async 옵션을 추가하고 동기 요청을 할 false로 설정 : 예상대로 다른 코드가 방해 *하지 않는

$.ajax({ 
     type: "POST", 
     async :false, 
     url: "/"+method+action, 
     data: {a:1}, 
     success: function(data){ 
     //the inner function logic... 
     executing = false; 
     } 
관련 문제