我有这个Ajax调用。如果用户成功登录,我想运行OnSuccess()。但如果没有,请不要运行它。
现在,它总是运行,因为Ajax调用并没有真正失败。就调用问题而言,它成功了但是用户实际上没有登录,所以我不想再运行它。
@using (Ajax.BeginForm("ProcessDownloadLogin", "Order", new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "content", OnFailure = "openErrorWindow()", OnSuccess= "getReport()" }))
{...
那么我如何有条件地运行OnSuccess?
答案 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函数中的状态代码。