小编典典

如何在$ .ajax回调中执行RedirectToAction?

ajax

我使用$ .ajax()每5秒轮询一次操作方法,如下所示:

$.ajax({
    type: 'GET', url: '/MyController/IsReady/1',
    dataType: 'json', success: function (xhr_data) {
        if (xhr_data.active == 'pending') {
            setTimeout(function () { ajaxRequest(); }, 5000);                  
        }
    }
});

和ActionResult动作:

public ActionResult IsReady(int id)
{
    if(true)
    {
        return RedirectToAction("AnotherAction");
    }
    return Json("pending");
}

为了使用RedirectToAction,我不得不将操作返回类型更改为ActionResult(最初是JsonResult,而我正在返回Json(new { active = 'active' };),但是从$
.ajax()成功回调中重定向和呈现新的View看起来很麻烦。我需要从此轮询ajax回发中重定向到“ AnotherAction”。Firebug的响应是“
AnotherAction”中的View,但未呈现。


阅读 281

收藏
2020-07-26

共1个答案

小编典典

您需要使用ajax请求的结果,并使用该结果运行javascript自己手动更新window.location。例如,类似:

// Your ajax callback:
function(result) {
    if (result.redirectUrl != null) {
        window.location = result.redirectUrl;
    }
}

其中“结果”是在ajax请求完成后jQuery的ajax方法传递给您的参数。(要生成URL本身,请使用UrlHelper.GenerateUrl,这是一个MVC帮助器,它基于操作/控制器/等来创建URL。)

2020-07-26