2017-10-10 76 views
1

我有这样一种形式:停止以前不显眼的Ajax调用

@using (Ajax.BeginForm("List", null, new AjaxOptions() { UpdateTargetId = "results" }, new { id = "myform" })) 
{ 
    <input id="search" type="text" value="" /> 
} 

我宣布向javascript传递时,用户在我搜索框中按下一个键提交:

<script type="text/javascript"> 
    $("#search").on("keyup", function() 
    { 
     $("#myform").submit(); 
    }); 
</script> 

但是,当用户搜索迅速,浏览器启动多个Ajax请求,并逐个等待每个调用的结束。 如何停止发送之前的ajax调用,而不删除ajax不显眼?

+0

如果你定义你的.NET端点作为异步任务之前,你也许不会有这个问题。也可能不会触发提交,直到用户键入至少3个字符。另外最后考虑使用自动填充插件而不是表单提交,这可能会更好一点。 – ADyson

+0

感谢您的推荐,但它仍然是异步任务,我无法将该字段更改为自动填充。这是一个现存的界面。 – GGO

回答

0

我反而建议直接调用$("#myform").submit(); 打破它下降到$阿贾克斯()请求中止&如果让一个又一个

$("#search").on("keyup", function(){ 
    var xhr; 

    if (xhr){ 
      xhr.abort(); //stop previous ajax   
    } 

    xhr = $.ajax({ 
       type: "GET", 
       url: "@Url.Action(list)", 
       data : {formdata : $("#myform").serialize() }, 
      success: function(response){ 
        // do some stuffs with $("#results") 
      } 
     });     

}); 
+1

我宁愿不删除不显眼的ajax调用,但如果我没有任何其他的可能性,我会用这个。 – GGO