2014-03-24 25 views
0

您好,我必須執行像ajax正在進行時,然後不允許用戶執行頁面刷新的執行。jQuery Ajax,當Ajax正在進行時,防止刷新按鈕

這裏是代碼我有

$('#submit').click(function() { 
     $(function() { 
     $(".col1").mask("Generating csv...."); //This will generate a mark, Here i would like to prevent the user from doing any sort of operation. 
     var to = $('#filters_date_to').val(); 
     var from = $('#filters_date_from').val(); 
     $.ajax({ 
      url:"../dailyTrade/createCsv?filters[date][to]="+to+"&filters[date][from]="+from,success:function(result){ 
       if(result) { 
        $(".col1").unmask(); //Here we can unlock the user from using the refresh button. 
        window.location = '../dailyTrade/forceDownload?file='+result; 
        setTimeout('location.reload(true);',5000); 
       } 
      } 
      }); 

     }); 
    }); 

任何建議。

+0

如果你指的是瀏覽器的「刷新」按鈕,那麼你**不應該**做到這一點。 – Praveen

+0

可能的共享:http:// stackoverflow。com/questions/11094887 /防止用戶重新加載頁面使用jQuery的或JavaScript,http://stackoverflow.com/questions/3527041/prevent-any-form-of-page-refresh-using- jQuery的 - JavaScript的 –

回答

0

我懷疑你是否應該那樣做。

$(window).bind('beforeunload',function(){ 
    return 'are you sure you want to leave?';  
}); 

如果你在談論你的網頁上刷新「HTML按鈕」,可以很容易地完成。就在您進行ajax調用之前,請禁用刷新按鈕,然後啓用ajax調用的成功/錯誤功能。

禁用按鈕

$("#refreshBtn").attr("disabled", "disabled"); 

啓用按鈕

$("#refreshBtn").removeAttr("disabled"); 
+0

當你開始輸入新的問題時重新加載頁面SO功能呢?然後,如果你確定,你會得到提示。如果不是,則不會發生重新加載。所以也許有辦法強制不重新加載。 – szpic

+0

你可以使用'beforeunload'事件來做到這一點。 – Yasser

+0

我使用了$(window).bind,這樣我就可以在ajax請求完成後解除綁定,謝謝Yasser –

2

你可以做的最好的是使用onbeforeunload有消息說,一個請求正在進行,並要求他們,如果他們一定要呈現給用戶他們想繼續。

例如

var req; 

window.onbeforeunload = function() { 
if(req) { 
    return 'Request in progress....are you sure you want to continue?'; 
} 
}; 


//at some point in your code 
req = //your request... 

您不能以任何方式阻止用戶使用JS或其他任何方式離開您的頁面。

+0

+1正確的方式來處理這種情況:) – Praveen

+0

是的,但用戶仍然可以執行頁面刷新。 – DRAX

+0

@DRAX - 的確如此,但絕對沒有辦法阻止它們,就像沒有什麼可以阻止它們關閉瀏覽器或按計算機上的電源按鈕一樣。 – Adam

0

你不能通過插入JavaScript代碼來做到這一點。

只有我能想到的方法是:

  1. 使用同步Ajax調用,在這樣的瀏覽器應凍結(但是它會通知腳本花費太長時間來處理和用戶將能夠阻止用戶執行)
  2. 寫的瀏覽器插件,將修改瀏覽器的行爲(例如,防止爲您預先設定的網址耳目一新頁)

兩種方式都是醜陋,我不建議這樣做。


,因此它可以恢復執行,如果頁面已經被刷新(使用HTML5的localStorage)你應該修改你的腳本。

http://www.w3schools.com/html/html5_webstorage.asp


在你的情況,我會把在localStorage的簡單狀態(布爾)檢查做了ajax調用發生與否。如果確實發生了,那麼只需再次調用相同的URL即可獲得文件名。但是在服務器端(如果你還沒有做過),你應該實現緩存,所以當兩次調用同一個url時,你不需要創建兩個單獨的文件,它可以是同一個文件(服務器在硬件上要輕得多資源)。

+1

應該注意的是,同步ajax調用不會停止Chrome瀏覽。它不會像FF那樣處理它 –