如何有条件运行



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

现在,它总是运行,因为Ajax调用并没有真正失败。就拨打电话而言,它取得了成功,但实际上并未登录用户,因此我不想运行它。

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

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

您不应使用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
 } });

将响应的状态代码更改为未经授权的401之类的状态代码,然后您可以称呼onfailure。

另外,如果您不希望请求失败,只需将状态代码更改为204否内容之类的内容,然后检查您的OnSuccess函数中的状态代码。

最新更新