本人菜鸟,写博客是为了记录些零零碎碎的注意点。。。。
使用ajax异步调后台的时候,如果后台在做安全校验,需要直接返回错误的响应代码以及错误信息,
这时我们不用response.sendRedirect("/XXX");
或者
request
.getRequestDispatcher(
"/XXX"
).forward
因为这里都会执行跳转,而我们需要的是直接将结果返回就可以了,这时原本我们可以使用
response
.sendError(Code, Message);
但是这里有个问题,就是当我们使用这个方法返回时,我们其实是在ajax的error回调函数接收响应,那么error有个参数是XMLHttpRequest
可以使用XMLHttpRequest.responseText得到传递过来的数据,但是这里接收到的信息其实是我们在后台传递的参数加上了一些html代码,将代码
直接显示在页面其实就是一个404风格的页面代码。
这样有时不是我们想要的,因为我们想的是error里要将错误信息显示在原来请求的页面的某个位置而不刷新页面。
所以我们可以在后台这样使用
response
.setStatus(HttpServletResponse.
SC_UNAUTHORIZED
);
的方法设置响应的代码,然后使用
response
.getWriter().print()
此方法来将参数传递过去,这样我们在error方法里拿到的响应信息就是直接传递的信息了。
如果我们想传递很多种类的信息,那么我们可以在后台传递一个json对象到前台,
response
.getWriter().append(
JSONObject.fromObject(
result
).toString()
)
这里的result是一个对象,可以放个map,转成json对象传递过去。
最后在error方法里将string转json就可以直接用了
var
result_json = jQuery.parseJSON( xhr.responseText );