2013-04-05 8 views
1

MVC 4 Webapp, JQueryПрогресс обновления MVC JsonResult

Я хочу показать ход процедуры длительности.

следующее вызывается из 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" }); 
} 

Очевидно, что это было бы прекратить на первое возвратного заявления.

Как это сделать?

Спасибо!

+0

Я не совсем уверен, если это возможно даже при регулярной AJAX звонков, для 'реального' прогресса я думаю, что это будет лучше всего использовать [SignalR] (http://signalr.net/), один из вариантов использования на первой странице, похоже, сходится с тем, что вам нужно ... –

+0

Посмотрите на это: http://stackoverflow.com/ вопросы/4322126/implementin ga-progress-bar-for-long-running-task-реализован-с-as-asp-net-mv, и это: http://stackoverflow.com/questions/2927284/need-an-asp-net-mvc- long-running-process-with-user-feedback? rq = 1 –

+0

Вы можете заставить процесс выполнить под рабочим потоком, а затем использовать ajax/setTimeout для «опроса» действия и проверки состояния. Затем он возвращает «занят»/«завершен» в зависимости от того, где находится рабочий. –

ответ

0

Чтобы «перевернуть свои собственные», вам понадобятся три отдельных метода 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); 
Смежные вопросы