【问题标题】:MVC c# multiple ajax requests handling, how to manage?MVC c#多个ajax请求处理,如何管理?
【发布时间】:2012-02-10 07:03:38
【问题描述】:

我在每次点击时都有一个自动完成字段搜索,我让它每 500 毫秒发送一次请求。

但有时搜索控制器会在大约 5 秒后回复。问题是每个请求还在堆栈中,即使客户端不再搜索,所有请求也会完成。

这使客户端等待基于 ajax 的进一步操作,直到完成所有先前的请求。 我试图实现的解决方案是在 ajax 中使用 .abort() 方法:

var currentRequest =null;
function keyUp(...){
if(currentRequest!=null){
  currrentRequest.abort();
}
currentRequest = $.get(...);

尽管如此,在服务器端,控制器仍然接收到所有挂起的请求,这些请求被 .abort() 取消。

有什么方法可以检测客户端连接状态以避免服务器端处理请求?

【问题讨论】:

  • 您是否使用任何 JavaScript 库进行自动完成等?
  • 我正在使用自己的自动完成@Tr1stan,这是一个不同的问题,因为,我正在使用 .abort() 方法,它正在工作,但是,我还必须取消服务器端的请求,检测到它已从客户端中止,这是我的问题。

标签: ajax asp.net-mvc c#-4.0


【解决方案1】:

在服务器端代码中,您可以使用Response.IsClientConnected 属性来确定请求是否已在客户端中止。因此,您可以释放当前用于不再需要的请求的资源。

我自己并没有真正使用过这个,但原则上我认为你可以实现你所追求的。

附带说明,您确实希望优化控制器中的代码,该代码需要大约 5 秒才能返回一个值,在动态 UI 项(例如自动完成)上存在如此多的延迟不会给出良好的用户体验。

【讨论】:

    猜你喜欢
    • 2013-01-31
    • 2015-04-28
    • 2012-08-02
    • 2014-01-07
    • 2011-11-08
    • 1970-01-01
    • 2018-08-19
    • 2013-01-12
    • 2021-05-25
    相关资源
    最近更新 更多