2014-12-21 1 views
0

jQuery ajax에서 제출 한 양식에 오류 확인 서버 쪽이 있습니다. beforeSend에서 gif 로더와 일부로드 텍스트를 표시하고 유효성 검사가 성공 메소드로 되돌려 보낼 때 오류에 대한 적절한 메시지를 표시합니다. 이 메시지는 x 초 후에 숨기기위한 시간 초과가 있습니다. 어쨌든 제출 버튼을 계속 클릭하면 setTimeout은 혼란스럽고 이전 것은 지워지지 않습니다.jQuery clearTimeout on ajax 성공이 혼란스럽고 이전 제한 시간을 지우지 않았습니다.

편집 평가

$('form').on('submit', function(e) { 

e.preventDefault(); 
var timer = null; 

$.ajax({ 
    beforeSend; function() { 
     $('.response').html('Processing form, please wait...'); 
    }, 

    success: function(data) { 

     if(data.error == true) { 
      $('.response').html('An error occurred.'); 
     } else { 
      $('.response').html('Thank you. Form submitted successfully.'); 
     } 

     if(timer) { clearTimeout(timer) }; 
     timer = setTimeout(function() { 
      $('.response').html('* Indicates required fields.'); 
     }, 10000); 

    } 
}); 
}); 

어떤 제안 : 여기에 내가 사용하고있는 코드입니다.

답변

2

timer 변수는 success 기능 범위, 그래서 항상null 이전 타임 아웃을 취소하도록 코드에 도달 입니다. timer의 선언을 AJAX 호출 외부로 이동하면 제대로 작동합니다.

var timer = null; 

$.ajax({ 
    beforeSend: function() { ... }, 
    success: function(data) { 
     if(timer) { clearTimeout(timer) }; 
     timer = setTimeout(myfunction, 10000); 
    } 
}); 
+0

네, 저도 시도해 보았지만 여전히 같은 결과를 얻었습니다. – user558134

+0

@ user558134이 코드가 없으면 우리는 무엇이 잘못되었는지를 알 수있는 컨텍스트가 충분하지 않기 때문에 더 많은 코드를 제공해야합니다. –

+0

좋아, 나는 더 많은 코드를 게시했다. 그것은 거의 그것입니다. – user558134