来自Ajax请求的ASP.NET MVC更新HTML组件

时间:2017-04-21 15:06:15

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

有没有办法在服务器端更新Ajax请求中的HTML进度条(或任何组件)?

例如(模拟):

JavaScript的:

$.ajax({
url: '/Sales/SaveStoreByType',
type: 'POST',
data: {
    locationId: id
},
success: function (result) {
         ...
},
 error: function (xhr, ajaxOptions, thrownError) {
         ...
},
update: function(percent){
   MyProgressBar('update',percent);
}
});

和服务器端:

public IActionResult SaveStoreByType(short locationId)
{
   foreach (var item in collection)
   {
     //here simule a heavy process and update progress bar
     i++;
     ajaxrequest.update(i);
   }
   return Json(new { error = 0 });
}

由于

1 个答案:

答案 0 :(得分:1)

您可以使用SignalR与服务器通信,并获取任务状态,以便您可以更新状态栏

但是你也可以在一个带有递归函数和setTimeout()函数的循环中发出请求,如下所示:

function viewProgress() {
    $.get('@Url.Action("GetTaskStatus", "YourController")', function (data) {
        if(data.Success){
            //finished
        }
        else{
            //update your status bar from data.Percent
            setTimeout(viewProgress(), 1000);
        }
    });
}

你必须在YourController中有一个Action:GetTaskStatus,它返回一个JsonResult,其中包含一个包含Success和Percent属性的对象