I use $.ajax() to poll an action method every 5 seconds as follows:
$.ajax({
type: 'GET', url: '/MyController/IsReady/1',
dataType: 'json', success: function (xhr_data) {
if (xhr_data.active == 'pending') {
setTimeout(function () { ajaxRequest(); }, 5000);
}
}
});
and the ActionResult action:
public ActionResult IsReady(int id)
{
if(true)
{
return RedirectToAction("AnotherAction");
}
return Json("pending");
}
I had to change the action return type to ActionResult in order to use RedirectToAction (originally it was JsonResult and I was returning Json(new { active = 'active' };
), but it looks to have trouble redirecting and rendering the new View from within the $.ajax() success callback. I need to redirect to "AnotherAction" from within this polling ajax postback. Firebug's response is the View from "AnotherAction", but it's not rendering.
Вам нужно использовать результат вашего запроса ajax и использовать его для запуска javascript, чтобы вручную обновить window.location самостоятельно. Например, что-то вроде:
// Your ajax callback:
function(result) {
if (result.redirectUrl != null) {
window.location = result.redirectUrl;
}
}
Где «результат» - это аргумент, переданный вам методом jQuery ajax после завершения запроса ajax. (А для генерации самого URL используйте UrlHelper.GenerateUrl
, который является помощником MVC, который создает URL-адреса на основе действий / контроллеров / и т. Д.)