如何处理ajax会形成多个请求

时间:2014-01-23 17:17:41

标签: c# asp.net-mvc asynchronous asp.net-ajax ajaxform

假设我的导航中有两个链接,使用Ajax.BeginForm在mvc4中使用不显眼的javascript。第一个请求向数据库发出一个请求,第二个请求发出两个请求,因此需要两倍的时间。假设每个请求需要一秒钟。现在,用户点击第二个链接,然后立即点击第一个链接。按此顺序发生的计划:

  1. 用户点击链接2
  2. 用户点击链接1
  3. 页面已加载链接1
  4. 页面已加载链接2
  5. 让我们说用户这样做是因为他在点击后立即意识到了他的错误。现在,而不是预期的第1页,他看到它只是一瞬间,然后再次,他看到一个页面#2,即使他不想完全达到它。

    首先,这是一个问题吗?如果是,是否有关于如何以最恰当的方式解决它的例子?或者也许我只是在田里追风,应该忘记它?

3 个答案:

答案 0 :(得分:7)

当你创建一个新的AJAX时,你应该总是中止之前的AJAX调用。它将帮助您的服务器并为用户提供所需的结果。

var xhr;

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

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

答案 1 :(得分:0)

也许您应该在请求正在进行时查看禁用链接。也许只需使用微调器在页面上添加一个简单的叠加层,以防止用户在请求完成之前单击其他链接。

答案 2 :(得分: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();
});