我使用$ .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,但未呈现。
Json(new { active = 'active' };
您需要使用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。)
UrlHelper.GenerateUrl