2014-01-23 36 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-事件处理程序/)。这是我的使用方式 –