2013-06-01 341 views
2

这里在下面的代码中,我想通过ajax调用一个servlet,然后我将数据从servlet重定向到jsp.ajax调用到servlet工作正常,但问题是重定向到jsp页面不显示在浏览器中,当我使用JavaScript代码而不使用ajax时,会显示相同的jsp页面。ajax调用servlet并重定向到jsp

的javascript Ajax代码在jspfile:

function generate(){ 
... 
... 
var url="RedirectServlet"; 
var ajax=new AJAXInteraction(url,"RedirectServlet"); 
var param ="FD="+FD+"&TD="+TD+"&actionid="+status+"&usercode="+usercode+"&action=reports"+""; 
ajax.send(param); 

.... 
} 
function AJAXInteraction(url, actionType) { 
    this.url = url; 

    var req = init(); 
    var actionRequested = actionType; 
    req.onreadystatechange = processRequest;  
    function init() { 
     if (window.XMLHttpRequest) { 
      return new XMLHttpRequest(); 
     } else if (window.ActiveXObject) { 
      return new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
    } 

    function processRequest() { 
     if (req.readyState == 4) { 
      if (req.status == 200) {         
       if(actionRequested=="TestDelegation") {      
        PostProcess1(req.responseXML); 
       } 

      } 
     } 
    } 
    this.send = function(param) { 
     req.open("POST", url, true); 

     req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 

     req.send(param); 


    } 
}//end of AJAX Interaction object. 

Servlet的代码:

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException 
     { 
    System.out.println("calling doPost() "); 

    response.setContentType("text/html;charset=WINDOWS-1256"); 
    String action=request.getParameter("action"); 
    System.out.println(action); 

    if(action.equals("reports")){ 
     System.out.println("inside reports"); 



     //Getting values from Reports_arb.jsp 
     String Fromdate=request.getParameter("FD"); 
     String Todate=request.getParameter("TD"); 
     String status=request.getParameter("actionid"); 
     String usercode=request.getParameter("usercode"); 

     //placing given values in a session 


     request.setAttribute("FD", Fromdate); 
     request.setAttribute("TD", Todate); 
     request.setAttribute("actionid", status); 
     request.setAttribute("usercode", usercode); 


     //Redirecting to showReport_arb.jsp 
     //response.sendRedirect("showReport_arb.jsp"); 

      ServletContext sc = getServletContext(); 
      sc.getRequestDispatcher("/sample.jsp").forward(request, response); 

回答

0

相反创建requestresponse对象的,使用jquery Ajax。使用非常简单。

/* Send the data using post and put the results in a div */ 

$.ajax({ 
    url: "/YourServlet", 
    type: "post", 
    data: values, 
    success: function(){ 
     alert("success"); 
     $("#result").html('submitted successfully'); 
    }, 
    error:function(){ 
     alert("failure"); 
     $("#result").html('there is error while submit'); 
    } 
}); 
8

你要明白,当你发送从阿贾克斯http请求的事实,这意味着你要发送从那里你要发送的请求单独的线程,而不是在主线程(页面本身的要求)。所以在servlet重定向不会反映在客户端。为了实现这一点,发回你想要重定向的URL作为对请求的响应,并且在成功的方法上使用ajax简单地使用java script window.location(URL);

在servlet的

JSONObject jobj = new JSONObject() 
String urlToRedirect = "test.jsp"; 
jobj.put("url",urlStr); 
response.getWriter().write(jobj.toString()); 

在客户端

$.ajax({ 
       url: 'servletName', 
       data: { 
        userID: selectedID 
       }, 
       type: 'post', 
       success: function(data){ 
        window.location = data.url; 
       } 

      }); 
+0

如果我有一些数据,我想发到JSP页面? –

+0

@AbhishekGhosh据我所知,如果你使用sendRedirect(),你不能发送数据到jsp。在这种情况下你需要使用转发。 – Artmal

+0

@Rajan,你在servlet中提到过的JSONObject是什么?我打算将一个参数从servlet传递给jsp。 – aiman