2011-08-31 6 views
1

제출할 때 AJAX 조치를 취하는 양식이 있습니다. 사용자가 양식을 제출 한 직후에 한 번 더 게시하려면 최소 대기 시간을 5 초로 지정하고 싶습니다.두 개의 제출 사이에 대기 시간을 두십시오.

더 좋은 방법은 무엇입니까? 나는이 스크립트 (작동하지 않습니다하지만 난 생각이 여기 추측) 제작 :

$("form#submit_under_wall"+array[1]).submit(function() { 

    var submit_timestamp=0; 
    var c = new Date(); 
    var now = ISODateString(c); 

    if(now-submit_timestamp>5){ 

     var d = new Date(); 
     var timestamp_message = ISODateString(d); 
     submit_timestamp = timestamp_message ; 

      //AJAX ACTION    

    }else{ alert("Wait 5sec between each post."); } 


return false; 
}); 
+2

'더 나은 방법'을 찾고 있다면 서버 측에이 사실을 부과해야합니다. 귀하가 클라이언트에서 수행하는 모든 작업은 사용자가 우회 할 수 있습니다. – mkoryak

답변

2

이 나던 작업의 타임 스탬프들이 제출마다 리셋 있기 때문에, 당신은 함수의 외부 submit_timestamp를 이동해야합니다. 또한, 그 5 아마해야 5 * 1000

이 같은 (테스트하지) :

var submitTime = (new Date()).getTime() - 5000; //let user submit if he clicks within 5s of page load 
$("form#submit_under_wall"+array[1]).submit(function(e) { 
    var now = (new Date()).getTime(); 
    if(now-submitTime > 5000){ 
     submitTime = (new Date()).getTime(); 
     //AJAX ACTION    
    } else { 
     alert("Wait 5sec between each post."); 
    } 
    e.preventDefault(); 
}); 
+0

사소한 개선 : 처음 5 초 동안 처음으로 제출을 시도하면 사용자가 기다리게합니다. 복사/붙여 넣기/제출 시나리오에서 발생할 수 있습니다. –

+0

좋은 전화, 고정 – mkoryak

0

가장 쉽고 가장 표준적인 방법은 자바 스크립트 기본 setTimeout 방법을 사용하는 것입니다.

var last_action; 

function ajax_action() { 
    last_action = Date.getTime(); 
    // AJAX STUFF 
} 

$("form#submit_under_wall"+array[1]).submit(function(e) { 
    e.preventDefault(); // Sexier than 'return false' 
    if(last_action != undefined) { 
    setTimeout(ajax_action, Date.getTime()-last_action); // Wait for 5s before doing the action 
    } else { 
    ajax_action(); 
    } 
}); 
+0

나중에 제출하고 싶지는 않지만 5 초마다 한 번만 제출할 수 있습니다. – mkoryak

+0

오른쪽. 그에 따라 내 대답을 편집했습니다. –

+0

여전히 좋지 않습니다. 그들이 버튼을 10 번 빨리 클릭한다고 상상해보십시오. 첫 번째 액션은 아약스 액션을 일으키고, 다음 9는 5 초 후에 큐에 대기합니다. 약 5 초 후에 9 개의 아약스 액션이 있습니다. (그리고 5 초 간격이 아닙니다.) – mkoryak

0

사용 window.setTimeout()

  1. 랩 당신이 함수에서 수행 할 (예를 들어 function foo(){ alert('test'); }를)

  2. 5 초 지연으로 전화하십시오. setTimeout(foo,5000)

관련 문제