2013-06-01 57 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