2015-11-03 143 views
4

这个servlet代码,在这里第一,我想发送返回消息(如果消息!= null)到Ajax的警报和第二个如果消息== null我想调用另一个jsp与列表传递给这个jsp。如何从AJAX向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()); 
       } 

在这里,我无法理解如何调用这个JSP网址中的其他部分

$.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

只是要在其他部分Ajax请求如同上面一样。

$.ajax({url: "jsp url", success: function(result){ 

}}); 

查找更多信息here

+0

“结果”的意思,有什么servlet的回报,即URL或其他任何东西,因为我无法理解,如果我在ajax的其他部分使用这个我在servlet中写的东西。 –

+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只要服务器不返回一个空应答(因此,在这两种情况下,你会得到一个警报)。

做的第一件事就是到content-type头添加到你的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); 
    } 
} 
+0

我已经尝试....在警报[对象xml]打印 –

+0

@priyankaahire对不起,我不知道我理解那个评论。无论如何,我已经编辑了我的答案,以解释如何按照您尝试的方式进行操作。 – megaflop

+0

从servlet我想要2响应第一如果提醒其他jsp调用与列表..我无法理解如何做到这一点......你给我你自己的建议。我会试着用 –