小编典典

多重回应AJAX要求

ajax

有没有办法使一个AJAX请求具有多个响应?

例如,如果向服务器发出一个GET请求,这将花费很长时间进行计算,那么我如何让服务器偶尔发送回响应,从而给我一些有关进度的数据?

如果是这样,有人可以发布一个示例,最好是使用Jquery并说明服务器可以通过它执行的机制?


阅读 285

收藏
2020-07-26

共1个答案

小编典典

您可以使用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');
}
2020-07-26