2012-07-25 50 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