这个servlet代码,这里我要发送返回消息(如果消息!= null)到Ajax for alert和第二个如果message == null我想调用另一个jsp并将列表传递给这个jsp.
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()); }
$.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 } } });
解决方法
您可以转发请求服务器端,以避免需要客户端发出第二个请求:
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!=“”)是不好的,因为只要服务器没有返回空响应,它就会返回true(所以在这两种情况下你都会收到警报).
首先要做的是在servlet代码中添加一个内容类型标头,以表明你在第二种情况下返回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); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。