如何使用ajax显示当前进程

时间:2013-01-22 09:33:43

标签: javascript ajax json asp.net-mvc-3-areas

我正在尝试在客户端显示服务器上的当前进程。

为此,我在会话级别定义了字符串,并为每个进程服务器处理器更新它,如下所示:

sessionStatus = "Loading entities from DB";

sessionStatus = "Validates the user information";

我正在使用ajax和Json:

服务器端:

[OutputCache(NoStore = true, Location = OutPutCscheLocation.None, Duration = 0)]
public JsonResult GetStatus()
{
        return Json(new {status = sessionStatus}, JsonRequestBehavior.AllowGet)
}

客户方:

setInterval('displayStatus()', 50);

function displayStatus(){
var url = '@(Url.Action("GetStatus"))';
$.ajax({
url: url,
dataType: "json",
async: false,
success: function(result) {
docunent.getElementById('statusText').innerHTML = result.status;
}
});
}

这就是我期望看到服务器进程持有的每一秒。

但问题是我只看到第一个动作,然后服务器执行所有动作,

最后我只看到了最后一次动作。

我的意思是他只在服务器上忙着所有进程,然后才面对客户端。

有人可以教我如何在服务器端甚至在客户端上继续操作,这样我就可以实时看到服务器上发生了什么?

谢谢

refael

1 个答案:

答案 0 :(得分:0)

你可以利用jquerys xhr回调来做到这一点,它可以让你在发送之前创建自己的XmlHTTPRequest

$.ajax({
  xhr: function()
  {
    var xhr = new XMLHttpRequest();
    xhr.upload.addEventListener("progress", function(e){
      if (e.lengthComputable) {
        console.log("Upload Progress: " + e.loaded/e.total)
      }
    }, false);
    xhr.addEventListener("progress", function(e){
      if (e.lengthComputable) {
        console.log("Download Progress: " + e.loaded/e.total)
      }
    }, false);
    return xhr;
  },
  type: 'GET',
url: "http://upload.wikimedia.org/wikipedia/commons/7/7d/Head_Platon_Glyptothek_Munich_548.jpg",
});
//"Download Progress: 0.017997048457690075"
//"Download Progress: 1"

我很高兴我得到了正确的问题。 (而且看起来图像实际上还不够大,无法获得体面的进度更新,但这个想法应该是明确的