标题没有写成jquery回调函数error捕获java抛出的异常信息是因为二者本身并无关联,java抛出的异常信息是交给虚拟机的,那么这里需要我们自己将在java里获得的异常信息返回给jquery即可。下面请看演示代码js请求部分
//简单定义一个jquery的ajax请求 var someLogincMethod=function() { $.ajax({ type: "POST", url : "xx_someLogicMethor", data: "start="+startdate+"&end="+enddate, success : function(html) { }, error: function (msg) { //在这里收到后台的异常信息并输出 //msg的对象类型为XMLHttpRequest,关于error的回调函数参数类型读者可以网上查看下
alert(msg.responseText); } }); }
java后端接收部分
package com.hsc.util; import java.io.PrintWriter; import com.hsc.action.BaseAction; public class JqueryGetException extends BaseAction{ private static final long serialVersionUID = 1L; /** * 自己的异常逻辑 */ public void someLogicMethor() { //设置响应的编码 response.setCharacterEncoding("UTF-8"); //定义响应的输出对象 PrintWriter out = null; try { //获取响应的输出对象 out=response.getWriter(); //在此书写自己的逻辑 } catch (Exception e) { //一旦业务逻辑出现异常可以捕获其异常消息别返回给请求 response.setContentType("text/plain"); //设置响应的状态500代表错误类型,可以被jquery捕获 response.setStatus(500); //将异常消息写回请求端 out.write(e.getMessage()); } finally { //关闭输出流 out.flush(); out.close(); } } }
另附上BaseAction这个基类,以简化多个Action的情况(无需再重复获得web的各种对象如request,response,session等)
package com.hsc.action; import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.interceptor.ServletResponseAware; import org.apache.struts2.interceptor.SessionAware; import org.apache.struts2.util.ServletContextAware; import com.opensymphony.xwork2.ActionSupport; /** * action的基类,封装好了一些web对象 * @author * */ public class BaseAction extends ActionSupport implements ServletRequestAware, ServletContextAware, ServletResponseAware, SessionAware { public BaseAction() { } public void setServletRequest(HttpServletRequest request) { this.request = request; } public void setServletContext(ServletContext application) { this.application = application; } public void setServletResponse(HttpServletResponse response) { this.response = response; } public void setSession(Map session) { this.session = session; } private static final long serialVersionUID = 1L; public HttpServletRequest request; public HttpServletResponse response; public Map session; public Map cash; public void setCash(Map cash) { this.cash = cash; } public ServletContext application; }
以上就是这篇文章要说明问题的全部代码,这里笔者使用的是ssh框架,这种有jquery返回错误信息的方式有时候很方便,不需要我们在success里面通过判断后台输出的自定义数据来决定我们该输出什么样的错误信息,可以只专注后台部分的业务逻辑实现简化代码的功用。