Javascript ASP.NETMVCAJAX请求正在进行中

Javascript ASP.NETMVCAJAX请求正在进行中,javascript,jquery,asp.net,ajax,asp.net-mvc,Javascript,Jquery,Asp.net,Ajax,Asp.net Mvc,我目前正在使用@Ajax.ActionLink以Ajax方式调用一些控制器操作。是否有任何方法可以检测页面上是否已经有Ajax请求正在运行/挂起?我想要的功能非常基本,即,一旦用户单击链接,他应该等待请求成功或失败。应该允许他再次单击它(向服务器生成新请求) 我本可以禁用链接,但不想这样做(我想a href不能禁用)试试jQuery ajax。它可以向服务器发出异步和同步请求。使用起来非常简单。默认情况下,async=true。试试这个 在发出新的ajax请求之前,此代码将检查是否有任何正在执行

我目前正在使用@Ajax.ActionLink以Ajax方式调用一些控制器操作。是否有任何方法可以检测页面上是否已经有Ajax请求正在运行/挂起?我想要的功能非常基本,即,一旦用户单击链接,他应该等待请求成功或失败。应该允许他再次单击它(向服务器生成新请求)


我本可以禁用链接,但不想这样做(我想a href不能禁用)

试试jQuery ajax。它可以向服务器发出异步和同步请求。使用起来非常简单。默认情况下,async=true。

试试这个

在发出新的ajax请求之前,此代码将检查是否有任何正在执行的ajax请求。您还可以订阅OnSuccess、OnFailure回调:

@Ajax.ActionLink("Home", "Index", "Home", new AjaxOptions { 
    OnBegin = "return onBegin();",
    OnComplete = "onComplete",
    UpdateTargetId = "article_site"
})
然后:

var request_executing = false;
function onBegin() {
    if (request_executing == true) {return false ;}
    request_executing = true;
    return true;
}

function onComplete() {
    request_executing = false;
}
或者一个jquery替代方案(因此您不需要臃肿的
jquery.unobtrusive ajax.js
文件)


在这种情况下,我将错过@Ajax.Actionlink提供的简单性。然后我将需要使用单击绑定函数,并转向更jquery类型的代码。对吗?当然,但请尝试添加完整的
@Ajax.Actionlink()
code
code
@Ajax.Actionlink(“单击我”,“ajaxactions”,新的AjaxOptions{UpdateTargetId=“content”,HttpMethod=“Post”,Confirm=“you Sure?”,InsertionMode=InsertionMode.InsertAfter,LoadingElementId=“im”,OnComplete=“end()”,OnBegin=“start()”},new{@id=“btn”,@class=“btn btn default”}
code
您既有
OnBegin
函数,也有
OnComplete
函数,因此可以添加javascrip变量(比如说)
var IsExecuting=false;
,然后在
OnBegin
中,如果其
true
,则取消ajax调用,否则将其设置为
true
。然后在
OnComplete
中,将其设置为false。用户仍然可以单击它,但它不会执行任何操作。另一个选项是jquery(无论如何,它会更好)@StephenMuecke So是否会先调用OnBegin,然后触发控制器代码,反之亦然?
OnBegin
在ajax调用服务器之前被调用,它可以返回
false
取消ajaxSo是否会先调用OnBegin,然后触发控制器代码,反之亦然?yes OnBegin函数将检查如果它可以发出请求,如果onBegin函数返回false,则您的操作将被取消,否则它将调用操作。我已稍微更新了上述函数。@VaibhavJain,您需要将
onBegin=“onBegin”,
更改为
onBegin=“return onBegin()”,
否则ajax调用将不会被取消。这就是您获得upvote的原因:)。如果您不介意的话,我们将对其进行编辑,以包含jquery替代方案。
@Html.ActionLink("Click Me", "ajaxactions", null, new { id = "btn", @class = "btn btn-default" })

var isExecuting = false;
$('#btn').click(function(e) {
  if(isExecuting) {
    e.preventDefault();
    return;
  }
  isExecuting = true;
  $(this).addClass('someClass'); // optional - to give some visual effect to the link while loading
  $.get('@Url.Action("ajaxactions")', function(data) {
    $('#content').append(data);
    $(this).removeClass('someClass');
    isExecuting = false;
  });
});