Is there a way to have one AJAX request with multiple responses?
For example, if make a GET request to the server which will take a long time to calculate, how could I have the server occasionally send back responses which give me some data about the progress?
If so, could somebody post an example, preferably with Jquery and an explanation of the mechanism through which the server can does it?
You can implement this using 2 ajax calls, one to run the process and a second call to periodically poll the progress:
On the server side:
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 }); }
On the client side:
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'); }
Fast answer: No, it isn't possible.
You should send more requests to get more responses
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With