How can I RedirectToAction within $.ajax callback?

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.

16
задан David Fox 20 August 2010 в 21:17
поделиться

1 ответ

Вам нужно использовать результат вашего запроса 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-адреса на основе действий / контроллеров / и т. Д.)

18
ответ дан 30 November 2019 в 21:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: