有没有办法在服务器端更新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 });
}
由于
答案 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属性的对象