这个servlet代码,这里我要发送返回消息(如果消息!= null)到Ajax for alert和第二个如果message == null我想调用另一个jsp并将列表传递给这个jsp。< / p>
if(message!=null){
response.setContentType("text/plain");
response.getWriter().write(message);
}else{
JSONObject jobj = new JSONObject();
String urlToRedirect = "SearchEmployee.jsp";
jobj.put("url",urlToRedirect );
response.getWriter().write(jobj.toString());
}
在这里,我无法理解如何在其他部分
中调用此jsp url $.ajax({
type:"POST",
url:'../SearchEmployeeServlet',
data:$('#DisplayEmployeeListForm').serialize(),//$('form').serialize();
success:function(msg){
if(msg!=""){
alert(msg);
window.location.reload(true);
}else{
....here i want to call 2nd jsp
}
}
});
答案 0 :(得分:1)
您可以转发请求服务器端,以避免客户端发出第二个请求:
request.getRequestDispatcher("SearchEmployee.jsp").forward(request, response);
或者,您可以发送HTTP重定向响应,因此客户端应自动处理重定向到第二个请求:
response.sendRedirect(response.encodeRedirectUrl("SearchEmployee.jsp"));
请注意,您在JavaScript中处理此问题的方式取决于您希望从SearchEmployee.jsp
收到的数据类型。例如,如果它是XML并且您已将响应内容类型设置为text/xml
,jQuery将解析它并将XML DOM对象传递给您的success
函数:
success:function(msg) {
if (msg instanceof XMLDocument) {
// handle list
} else {
alert(msg);
window.location.reload(true);
}
}
如果您期待HTML,可能会以字符串形式返回,因此您可以测试返回的字符串是否以某些HTML开头。例如,如果您的HTML始终以<ul>
标记开头:
success:function(msg) {
if (msg.startsWith("<ul>")) { // note you may need to do msg = $.trim(msg) first
// handle list
} else {
alert(msg);
window.location.reload(true);
}
}
如果你不想按照上面的建议自动转发,而你宁愿坚持当前的做法,那么你需要做一些改变。
在if(msg!="")
函数中使用success
是不好的,因为只要服务器没有返回空响应,它就会返回true
(所以在这两种情况下你都会得到#{1}}警报)。
要做的第一件事是在servlet代码中添加content-type
标头,以表明你在第二种情况下返回JSON:
response.setContentType("application/json");
response.getWriter().write(jobj.toString());
现在,当jQuery处理响应时,它会在调用success
函数之前尝试将其解析为JSON。因此,您现在可以在成功函数中测试jQuery给出的参数是对象还是字符串:
success:function(msg){
if (typeof msg === "object") {
// you got the JSON response
$.ajax({
url: msg.url,
// etc...
});
} else {
// you got the plain text response
alert(msg);
window.location.reload(true);
}
}
答案 1 :(得分:0)