【问题标题】:MVC JsonResult updating progress [duplicate]MVC JsonResult更新进度[重复]
【发布时间】:2013-04-05 10:10:19
【问题描述】:

MVC 4 Web 应用,JQuery

我想展示一个冗长过程的进度。

从 JSON 调用以下内容需要几秒钟...

基本上,我想做的是:

[HttpPost]
public JsonResult Update(var x)
{
    return Json(new { Result = "Working", Message = "Waiting on Server" });
    var y = contactAnotherServer(x);
    return Json(new { Result = "Working", Message = "Crunching Data" });
    var finished = doSomethingWithData(y);
    return Json(new { Result = "OK", Message = "Done" });
} 

显然这将在第一个返回语句处终止。

如何做到这一点?

谢谢!

【问题讨论】:

  • 我不太确定是否可以通过常规 AJAX 调用实现“真正”的进步,我认为最好使用 SignalR,这是首页上的用例之一似乎与您需要的东西融合...
  • 您可以让进程在工作线程下执行,然后使用 ajax/setTimeout 来“轮询”操作并检查状态。然后它根据工作人员在进程中的位置返回“忙碌”/“完成”。

标签: c# jquery asp.net-mvc


【解决方案1】:

要像这样“自己动手”,您需要三个单独的 JsonResult 方法和一个相当复杂的 JavaScript 函数。即:

控制器

public JsonResult Step1()
{
    return Json(new { Result = "Working", Message = "Waiting on Server" });
}
public JsonResult Step2()
{
    return Json(new { Result = "Working", Message = "Crunching data" });
}
public JsonResult Step3()
{
    return Json(new { Result = "Ok", Message = "Done" });
}

JS

// urls
var urls = ["/step1","/step2","/step3"];

// counter
var counter = 0;

// recursive method
var fetchAndUpdateRecursive(url){

   // get data
   $.ajax(url, {
        async: false,
        success: function(r){

              // use r to update something visually
              // then...

              // change the url
              counter++;
              url = urls[counter];

              // go again
              fetchAndUpdateRecursive(url);
        };
   });
};

// go
var urlToStartWith = urls[counter];
fetchAndUpdateRecursive(urlToStartWith);

【讨论】:

    猜你喜欢
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    相关资源
    最近更新 更多