2014-01-23 46 views
3

比方說,我有兩個鏈接在我的導航中使用Ajax.BeginForm與mvc4中不引人注意的JavaScript。第一個向數據庫發出一個請求,第二個向兩個請求發送兩個請求。假設每個請求都需要一秒鐘。現在用戶點擊第二個鏈接,然後立即 - 第一個鏈接。在這種順序會發生什麼的方案:如何處理Ajax形式的多個請求

  1. 用戶點擊鏈接2
  2. 用戶點擊鏈接1個
  3. 頁面加載鏈接1個
  4. 頁面加載鏈接2

假設用戶這樣做是因爲他點擊後立即意識到自己的錯誤。現在,而不是第一頁預期,他看到了一秒鐘,然後再次,他看到一個頁面#2,即使他不想完全達到它。

首先,這是一個問題嗎?如果是,是否有例子說明如何以最合適的方式解決問題?或者,也許我只是在田野追風,應該忘記它?

回答

7

你應該總是放棄以前的AJAXÇ所有,當你正在做一個新的。它將幫助您的服務器併爲用戶提供理想的結果。

var xhr; 

function makeRequest() { 
    if (xhr) 
     xhr.abort(); 

    xhr = $.ajax(...); 
} 
+0

累積獎金!正是我需要的。非常感謝:) –

+0

不客氣!祝你好運! –

0

也許你應該看看在正在進行的請求中禁用鏈接。也許只需用微調器在頁面上添加一個簡單的覆蓋圖,以防止用戶點擊其他鏈接,直到請求完成。

+0

這件事是屬於你的頭腦從你過去看到一些例子,或只是一個一般的建議的想法? –

+0

@AndriusNaruševičius - 我已經在網站上看到過這一點 - 這個想法是你希望用戶知道有一些進程正在運行。特別是如果你想阻止用戶一遍又一遍地點擊按鈕來重新建立新的請求。 – Gjohn

0

CSS

#loading{ 
position: absolute; 
z-index: 99998; 
top: 0px; 
left: 0px; 
width: 100%; 
height: 1161px; 
background-color: rgb(255, 255, 255); 
opacity: 0.01; 
background-position: initial initial; 
background-repeat: initial initial; 
} 

HTML

<div id="loading"></div> 

腳本

$(document).ajaxStart(function() { 
     $("#loading").show(); 
    }); 

$(document).ajaxComplete(function(event,request, settings) { 
    $("#loading").hide(); 
}); 
+0

謝謝你的回答。這是你自己的創造力,還是來自一個網站(或者甚至是幾個)處理這種事情的例子?一兩個參考可能證明是非常有價值的。 –

+0

所有的方法都在[http://api.jquery.com/category/ajax/global-ajax-event-handlers/](http://api.jquery.com/category/ajax/global-ajax-事件處理程序/)。這是我的使用方式 –