none
MVC异步控制器的奇怪问题 RRS feed

  • 问题

  • 我在同一页面同时发起了两个Ajax请求,其中第一个用了AsyncController。

    但是当第一个没有执行完时会造成阻塞,第二个会在第一个执行完之后才执行,为什么会这样呢?

    • 已移动 Lie You 2011年11月16日 10:24 (发件人:Visual C#)
    2011年11月14日 6:52

答案

  • 你好,如果你的第二个ajax call是在jQuery的success handler中的话,那么要求第一个ajax call 完成之后再执行。如果第一个没有完成,那么第二个就不会执行,可能造成阻塞。可以把相关的javascript代码贴出来看一下。

     

    2011年11月17日 3:18
    版主

全部回复

  • AsyncController 怎么写的,拿出来看看?然后怎么在 View 里面 Call 这个 AsyncController 的?
    Mark Zhou
    2011年11月14日 7:57
  • public class CometController : AsyncController
        {
            public void GetNewMessagesAsync()
            {
                System.Timers.Timer timer = new System.Timers.Timer(5000);
                AsyncManager.OutstandingOperations.Increment();
                timer.Elapsed += (sender, e) =>
                {
                    if(true)
                    {
                        List<string> dataList = new List<string> { "123" };
                        AsyncManager.Parameters["para"] = dataList;
                        AsyncManager.OutstandingOperations.Decrement();
                    }
                };
                timer.Start();
            }
            public ActionResult GetNewMessagesCompleted(IList<string> para)
            {
                return Json(para, JsonRequestBehavior.AllowGet);
            }
        }
    2011年11月14日 8:00
  • 在View里用的就是Jquery的getJSON
    2011年11月14日 8:05
  • 你好,如果你的第二个ajax call是在jQuery的success handler中的话,那么要求第一个ajax call 完成之后再执行。如果第一个没有完成,那么第二个就不会执行,可能造成阻塞。可以把相关的javascript代码贴出来看一下。

     

    2011年11月17日 3:18
    版主