2011-08-03 226 views
1

我正在使用jquery向可能需要一段時間返回的控制器方法發出ajax請求。我遇到的問題是,我無法重新加載頁面,直到ajax請求完成..它只是掛起,直到控制器方法完成,然後重新加載頁面。長時間運行ajax請求,防止頁面重新加載

這是我的ajax請求。

$.ajax({ async:true, type: "POST", url: url, data: senddata, dataType: "xml", success: GetLayerFeaturesCallback }); 

我正在使用一個AsyncController並等待10秒鐘返回。

public void GetFeaturesAsync(int layerId, BoundingBox bbox, int maxFeatures = 50) 
    { 
     AsyncManager.OutstandingOperations.Increment(); 
     Task task = Task.Factory.StartNew(() => { 
      System.Threading.Thread.Sleep(10000); 
     }); 
     task.ContinueWith(t => { 
      AsyncManager.Parameters["element"] = new XElement("TEST"); 
      AsyncManager.OutstandingOperations.Decrement(); 
     }); 
    } 

    public XmlActionResult GetFeaturesCompleted(XElement element) 
    { 
     return new XmlActionResult(element); 
    } 

爲什麼我不能重新加載頁面,直到該方法完成?

回答

0

可能是您的應用程序中的死鎖,或者允許處理的線程或連接數(每個ip)受Web服務器限制。

當長請求正在處理時,您是否可以從其他瀏覽器或其他計算機打開任何其他頁面?

編輯 asp.net中的會話也會導致鎖定。除非您已將頁面的會話標記爲只讀,否則一次只能有一個請求訪問會話。

+0

代碼位於本地IIS中,只有一個瀏覽器實例打開。我沒有觸及Session ..上面的代碼是我正在做的唯一的事情。 – mdm20

+2

即使只有一個瀏覽器擊中它,請求也不會停止,直到完成爲止。 IIS不會檢測到您取消了ajax請求並繼續等待所有10秒。如果你在<%@ Page聲明中有EnableSessionState =「True」,會話就不會被觸及,而是鎖定會話。 – aero

相關問題