我正在尝试在客户端显示服务器上的当前进程。
为此,我在会话级别定义了字符串,并为每个进程服务器处理器更新它,如下所示:
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
答案 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"
我很高兴我得到了正确的问题。 (而且看起来图像实际上还不够大,无法获得体面的进度更新,但这个想法应该是明确的