代码之家  ›  专栏  ›  技术社区  ›  David Fox

如何在$.ajax回调中重定向到操作?

  •  16
  • David Fox  · 技术社区  · 14 年前

    $.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,我必须将action返回类型更改为ActionResult(最初是JsonResult,我正在返回) Json(new { active = 'active' }; ),但从$.ajax()成功回调中重定向和呈现新视图时似乎有问题。我需要重定向到“AnotherAction”从这个投票ajax回发。Firebug的反应是来自“AnotherAction”的视图,但它不是渲染。

    4 回复  |  直到 14 年前
        1
  •  19
  •   Kirk Woll    11 年前

    您需要使用ajax请求的结果,并使用该结果运行javascript来手动更新窗口位置你自己。例如,类似于:

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

    UrlHelper.GenerateUrl ,这是一个MVC帮助程序,它根据操作/控制器等创建URL。)

        2
  •  4
  •   See Sharper    8 年前

    C#:

    return RedirectToAction("Action", "Controller", new { myRouteValue = foo});
    

    JS公司:

     $.ajax({
        type: "POST",
        url: "./PostController/PostAction",
        data: data,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        complete: function (result) {
            if (result.responseText) {
                $('body').html(result.responseText);
            }
        }
    });
    
        3
  •  2
  •   zuazo    8 年前

    C#运转良好

     $.ajax({
            type: "POST",
            url: posturl,
            contentType: false,
            processData: false,
            async: false,
            data: requestjson,
            success: function(result) {
                if (result) {
                    $('body').html(result);
                }
            },
    
            error: function (xhr, status, p3, p4){
                var err = "Error " + " " + status + " " + p3 + " " + p4;
                if (xhr.responseText && xhr.responseText[0] == "{")
                    err = JSON.parse(xhr.responseText).Message;
                console.log(err);
            }
        });   
    
        4
  •  0
  •   Colin    6 年前

    Html.RenderAction 视图中的辅助对象:

    public ActionResult IsReady(int id)
    {
        if(true)
        {
            ViewBag.Action = "AnotherAction";
            return PartialView("_AjaxRedirect");
        }
        return Json("pending");
    }
    

    @{
        string action = ViewBag.ActionName;
        Html.RenderAction(action);
    }
    

    参考文献: https://stackoverflow.com/a/49137153/150342