有没有办法使一个AJAX请求具有多个响应?
例如,如果向服务器发出一个GET请求,这将花费很长时间进行计算,那么我如何让服务器偶尔发送回响应,从而给我一些有关进度的数据?
如果是这样,有人可以发布一个示例,最好是使用Jquery并说明服务器可以通过它执行的机制?
您可以使用2个ajax调用来实现此目的,一个调用运行该进程,第二个调用定期轮询进度:
在服务器端:
public class ProgressInfo { public int Percent {get;set;} public bool Done {get;set;} } public JsonResult DoCalculation(string id) { ProgressInfo progress = new ProgressInfo(); if(!string.IsNullOrEmpty(id)) { Session[id] = progress; } //periodicly update progress progress.Percent++; } public JsonResult GetProgress(string id) { ProgressInfo progress; if(string.IsNullOrEmpty(id) || (progress = Session[id] as ProgressInfo) == null) { return Json(new { success = false }); } if(progress.done) { Session.Remove(id); } return Json(new { success = true, done = progress.done, percent = progress.Percent }); }
在客户端:
var progressID = Math.random(); function doCalculation() { $.post('<%=Url.Action("DoCalcluation")%>/' + progressID); setTimeout(pollProgress, 1000); } function pollProgress() { $.post('<%=Url.Action("GetProgress")%>/' + progressID, function(response){ if(!response.success) { alert('Cannot find progress'); return; } if(response.done) { alert('Done!'); } else { alert('Progress at ' + response.precent + '%'); setTimeout(pollProgress, 1000 /*1 second*/); } }, 'json'); }