2011-08-31 61 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

最簡單,最標準的方式是使用JavaScript本地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倍快,第一個會導致ajax動作,接下來的9會在5秒後排隊等待,大約5秒後,會有9個ajax動作(並且不會間隔5秒) – mkoryak

0

使用window.setTimeout()

  1. 裹你想在一個函數做什麼(如function foo(){ alert('test'); }

  2. 稱之爲5秒延遲setTimeout(foo,5000)

相關問題