【问题标题】:Ajax error function not calling in javaAjax错误函数未在java中调用
【发布时间】:2016-11-15 11:55:25
【问题描述】:

Ajax 错误函数未在 java 中调用

这里是ajax方法:-

$.ajax({
    type:"post",
    timeout:5000,
    url:"<s:property value="URL"/>",
    data:{name:newName},
    success:function () {
        $("#errorDiv").html("Successfully updated");
    },
    error:function (data) {
        $("#errorDiv").html("Error.");
    }
})

更新用户方法:-

    @Action(value = "renameUser", results = {@Result(name = "success", type = "json"),
    @Result(name = "input", type = "tiles", location = "view.list")},
            interceptorRefs = {@InterceptorRef("auditingAdminDefault")})
    @Override
    public String execute() throws Exception {
        String result = "input";
        try {
            updateUser(name);
            addActionMessage(name + " user name was successfully updated.");
            result = "success";
        } catch (Exception e) {
            addActionMessage(e.getMessage());
            result = "input";
        }
        return result;
    }
}

updateUser();

updateUser() throws Exception {

if (..) {

} else {
  throw Exception();
}

我能够成功更新用户而不会出现问题。但成功更新或抛出任何错误都会调用成功函数。

我需要在 Ajax 中使用两件事。

  • 应根据结果调用成功和错误方法
  • 我需要从更新用户方法中捕获错误并将其显示在 UI 中。

请任何人告诉我我在这里做错了什么?

【问题讨论】:

  • 您确定该请求正在发出吗?你在什么事件下运行它?您是否检查过该事件触发? newName 的值是多少?控制台的网络选项卡中的响应是什么(如果有)?
  • 成功时,我以 Object { name: "test1" } 形式获取数据,当错误时,我得到如下“-//W3C//DTD XHTML 1.0 Strict// EN" "w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> w3.org/1999/xhtml" xml:lang="en" lang="en"> ....."
  • 它返回整个正常的 HTML 页面而不是 404。

标签: javascript java jquery ajax jsp


【解决方案1】:

您正在捕获操作方法中的所有错误并向客户端返回有效响应。

catch (Exception e) {
        addActionMessage(e.getMessage());
        result = "input";
    }

return result;

这就是为什么即使在失败的情况下,也会调用成功回调,因为对于客户端,响应是有效的。如果发生异常,您应该在操作方法中返回错误。

理想情况下,您应该为任何异常返回一个错误视图。

catch (Exception ex)
{
   addActionMessage(e.getMessage());
   return View("Error");
}

但在您的情况下,您希望在同一视图中显示错误,因此您可以执行类似的操作

你可以为异常做这样的事情。

public ActionResult execute() throws Exception {
{
    try
    {
        //code everything works fine
    }
    catch (Exception ex)
    {
         return new HttpStatusCodeResult(500);
    }
}

【讨论】:

  • 好的。谢谢。我将删除 try 和 catch 块。如何捕获从 updateUser 方法抛出的异常并在 UI 中显示。示例错误:“更新用户时出错”。请参考我的 updateUser 方法。
  • View 是什么意思。是自定义方法还是需要导入?
  • 错误视图用于向最终用户隐藏异常详细信息,但由于您想在 ajax 回调中进行处理,因此我已经编辑了答案。如果出现错误,将向客户端返回 500(服务器错误)http 代码并触发错误回调。
  • @karan 有帮助吗?
  • 没有。我无法使用 ActionResult 和 HttpStatusCodeResult。我需要为它添加单独的依赖项吗?我使用返回类型作为字符串。你想让我使用 ActionResult 吗?
【解决方案2】:

我能够解决以下问题:-

  1. 发生错误时未调用 Ajax 错误回调
  2. 从方法中捕获异常并在 ajax 函数中显示

以下是更新后的方法及其现在的工作方式:-

更新用户方法:-

private String errorStatement;

public String getErrorStatement() {
    return errorStatement;
}

@Action(value = "renameUser", results = {@Result(name = "success", type = "json"),
@Result(name = "input", type = "json", , params = { "statusCode", "500" })},
        interceptorRefs = {@InterceptorRef("auditingAdminDefault")})
@Override
public String execute() throws Exception {

    try {
        updateUser(name);

        return SUCCESS;
    } catch (Exception e) {
        errorStatement = e.getMessage();
        return ERROR;
    }

}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多