我正在尝试做什么...
我想将响应消息发送回调用 jQuery AJAX 方法,然后我可以用它来创建警告弹出消息。
我尝试使用 HttpServletResponse 方法:
sendError(int sc, java.lang.String msg)
问题...
不幸的是,此方法将 "msg" 字符串值包装在较大的 HTML 字符串中 - 即显然旨在用作独立错误页面的内容。
--我希望只获取消息字符串本身(即使用 jquery 对象方法 - 例如“jqXHR”)。
我应该如何最好地实现这一点? (即,在没有 HTML“包装器”的情况下将消息返回到成功/失败方法)
...java 服务器片段...
-
-
-
private List<MyDTO> performSearch(HttpSession session, HttpServletResponse resp)
{
try
{
// (code to inspect searchString, etc.)
//...forcing error for this test...
throw new Exception("bad request yaddah...yaddah...yaddah...");
}
catch (Exception e)
{
try
{
resp.sendError(HttpServletResponse.SC_NOT_FOUND, e.getMessage());
}
catch (Exception e)
{
e.printStackTrace();
}
}
return null;
}
-
-
-
...JQuery 客户端代码段...
-
-
-
$.ajax({
type: "POST",
url: searchurl,
data: "searchString=" + searchString,
async: true,
success: function(jqXHR) {
alert("success");
},
error: function(jqXHR) {
alert("Error - bad search string used:" + jqXHR.responseText);
}
});
-
-
-
<小时/>
注意: 执行如下操作,似乎工作正常,但是,我想知道是否有更好的方法将简单的消息字符串发送回ajax 调用...
-
-
-
private List<MyDTO> performSearch(HttpSession session, HttpServletResponse resp)
{
try
{
// (inspect searchString, etc.)
//...forcing error for this test...
throw new Exception("bad request yaddah...yaddah...yaddah...");
}
catch (Exception e)
{
try
{
resp.setStatus(HttpServletResponse.SC_NOT_ACCEPTABLE);
resp.getWriter().write(e.getMessage());
resp.flushBuffer();
}
catch (Exception ex)
{
e.printStackTrace();
}
}
return null;
}
-
-
-
完成我想做的事情的最简单/最好的方法是什么?
感谢您的帮助!!!
最佳答案
我不知道三年后你是否还需要答案,但我正在做一个项目,需要做同样的事情。我用ResponseEntity作为我的 Controller 中方法的返回类型。它有一个 HttpStatus 代码(它将触发来自 jQuery/AJAX 的成功/错误函数)和一个主体(没有包装器)。您可以像这样重写 Controller 方法:
Controller
private ResponseEntity performSearch(HttpSession session)
{
try
{
// (inspect searchString, etc.)
//...forcing error for this test...
throw new Exception("bad request yaddah...yaddah...yaddah...");
}
catch (Exception e)
{
return new ResponseEntity(e.getMessage, HttpStatus.BAD_REQUEST);
}
return null;
}
jQuery/AJAX
你的代码没问题,调用 jqXHR.responseText()
即可。另外,成功函数的签名是 (data, textStatus, jqXHR)
(jqXHR 排在第三,而不是第一)。
响应实体
ResponseEntity 可以通过多种方式返回:
//Equivalent
return new ResponseEntity(someString, HttpStatus.OK);
return ResponseEntity.ok(someString);
return ResponseEntity.ok().body(someString);
ResponseEntity 使用泛型,例如 ResponseEntity<T>
。因此,如果您的方法返回 List,您可以使用 private ReponseEntity<List<MyDTO>>
.
希望这仍然对您有帮助。
关于java - 从服务器发送简单错误响应消息来调用 jQuery ajax 方法(例如,responseText)的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17157562/