2015-05-22 46 views
0

我有方法在我的控制器是這樣的:異步控制器的方法和阿賈克斯

[HttpPost] 
    public async Task<string> GetMenu(int? Current) { 
     await Task.Run(() => System.Threading.Thread.Sleep(60000)); 
     return ""; 
    } 

我用jQuery Ajax請求是這樣開始的:

$.ajax({ 
     type: "POST", 
     url: '@Url.Action("GetMenu","Products")', 
     data: "{}", 
     async: true, 
     success: function (data) { 
      $('#menu-container').html(data); 
     }, 

    }); 

和瀏覽器凍結的使用getMenu行動的時間正在處理。 如何以非阻塞方式在後臺進行此項工作?

+0

我只能建議您嘗試使用async:true刪除一行。或者嘗試使用$ .post() – tsdaemon

+0

'async:true'作爲默認值,即使你沒有指定它 – Xmindz

回答

0

我認爲你需要像這樣

HTML

<pre id="testpre"> 
not end 
</pre> 

JS

$.post("/Home/ProtocolAjaxHandler", { }, function (data) { 
$("#testpre").html("END"); 
}); 

控制器

[HttpPost] 
public ActionResult ProtocolAjaxHandler(object _param) 
{ 
    System.Threading.Thread.Sleep(15000); 
    return Json(null); 
} 
0

我如何可一個在非阻塞的方式背景中的這項工作?

正如我在我的博客上解釋的,async doesn't change the HTTP protocol。根據您實際嘗試執行的操作,您可以嘗試SignalR或使用具有可靠隊列的分佈式體系結構,並單獨執行後臺進程as I allude to in another post

+0

但是爲什麼「瀏覽器凍結」?這只是一個不幸的措辭? – usr

+1

我解釋爲「瀏覽器沒有得到迴應」。 –