2012-07-25 49 views
0

我的ajax重定向響應有問題。 重定向工作正常,但稍後當我必須返回一個帶響應的布爾值時,它會返回重定向。AJAX響應衝突

這是代碼。有關線路有意見:

import java.io.IOException; 
import java.io.PrintWriter; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class Worker extends HttpServlet { 

    private static final long serialVersionUID = 1L; 
    private static String firstName = ""; 
    private static String lastName = ""; 
    private static boolean doAnimWheel = false; 
    private static String portion; 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     this.doPost(request, response); 
    } 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     // begin recovering form 
     Worker.firstName = request.getParameter("firstName"); 
     Worker.lastName = request.getParameter("lastName"); 

     response.sendRedirect("launch.html"); // TODO find why it blocks response 
     // end recovering form 

     String param = request.getParameter("srcId"); 
     if(param != null) { 
      if(param.equals("launch")) { 
       Worker.doAnimWheel = new Boolean(request.getParameter("doAnimWheel")).booleanValue(); 
       return; 
      } 
      else if(param.equals("wheel")) { 
       response.setContentType("text/plain"); 
       PrintWriter out = response.getWriter(); 
       out.print(Worker.doAnimWheel); // Here I have to return my Boolean, but it return launch.html 
       out.flush(); 
       out.close(); 
       return; 
      } 
      else if(param.equals("result")) { 
       Worker.portion = request.getParameter("portion"); 
       Worker.doAnimWheel = new Boolean(request.getParameter("doAnimWheel")).booleanValue(); 
       return; 
      } 
     } 
    } 
} 

回答

0

我認爲問題是,你總是在你的方法開始發送重定向

response.sendRedirect("launch.html"); // TODO find why it blocks response 
    // end recovering form 

爲的sendRedirect方法HttpServletResponse的Java文檔指出:「使用這種後方法,應該認爲這個迴應是承諾的,不應該寫入。「
您嘗試稍後返回的內容顯然被忽略。


您可能要移動的sendRedirect打電話來的代碼實際上需要執行重定向,像這樣的分支:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     // begin recovering form 
     Worker.firstName = request.getParameter("firstName"); 
     Worker.lastName = request.getParameter("lastName"); 

     String param = request.getParameter("srcId"); 

     if(param.equals("launch")) { 
         Worker.doAnimWheel = new Boolean(request.getParameter("doAnimWheel")).booleanValue(); 
         response.sendRedirect("launch.html"); 
         return; 
        } 
        else if(param.equals("wheel")) { 
         response.setContentType("text/plain"); 
         PrintWriter out = response.getWriter(); 
         out.print(Worker.doAnimWheel); // Here I have to return my Boolean, but it return launch.html 
         out.flush(); 
         out.close(); 
         return; 
        } 
        else if(param.equals("result")) { 
         Worker.portion = request.getParameter("portion"); 
         Worker.doAnimWheel = new Boolean(request.getParameter("doAnimWheel")).booleanValue(); 
         response.sendRedirect("launch.html"); 
         return; 
        } 
     } 
    } 
} 
+0

噢,這就像你說的,問題是,我打電話每次在方法開始時重定向。 非常感謝! – Emilie 2012-07-25 08:25:18