如何有条件地运行OnSuccess

时间:2014-01-23 18:51:33

标签: ajax asp.net-mvc

我有这个Ajax调用。如果用户成功登录,我想运行OnSuccess()。但如果没有,请不要运行它。

现在,它总是运行,因为Ajax调用并没有真正失败。就调用问题而言,它成功了但是用户实际上没有登录,所以我不想再运行它。

@using (Ajax.BeginForm("ProcessDownloadLogin", "Order", new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "content", OnFailure = "openErrorWindow()", OnSuccess= "getReport()" }))
    {...

那么我如何有条件地运行OnSuccess?

2 个答案:

答案 0 :(得分:1)

您不应该使用OnSuccess来确定这样的行为。 OnSuccess应该只确定Ajax调用是否成功。你想保持这种逻辑。否则,您正在创建一个难以维护的黑客,并为以后的开发人员或您自己工作。如果他们没有登录,则传回一个设置了一些标志的JSON结果。这样你可以在新情况出现时处理任何情况。福克斯的例子:

在服务器上:

Public JsonResult SomeMethod()

// some code here

return Json({loggeddIn: true}, JsonRequestBehavior.AllowGet);

客户方:

$.ajax({
    url: "/SomeController/SomeMethod",
    type: "POST",
    data: parameters,
    success: function(result)
{ If (result.loggedIn == true) { 
 //Do logged in code
 }
 Else {
  // do code for not logged in users... like redirect them to login page
 } });

答案 1 :(得分:0)

将响应的状态代码更改为401 Unauthorized,然后您就可以调用OnFailure。

或者,如果您不希望请求失败,只需将状态代码更改为204 No Content,并检查OnSuccess函数中的状态代码。