2015-05-22 4 views
0

У меня есть метод в мой контроллер, как это:Асинхронный метод контроллера и Ajax

[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

Как м ake эта работа в фоновом режиме неблокируемым способом?

Как я расскажу в своем блоге, async doesn't change the HTTP protocol. В зависимости от того, что вы на самом деле пытаетесь сделать, вы можете либо попробовать SignalR, либо использовать распределенную архитектуру с надежной очередью и отдельным фоновым процессом as I allude to in another post.

+0

Но почему« замораживание браузера »? Это просто печальная формулировка? – usr

+1

Я интерпретировал его как «браузер не получает ответа». –

Смежные вопросы