2014-10-16 1 views
2

아약스를 배우기 위해 책을 읽는 중입니다. 내 서블릿 응답 (텍스트 만)이 자바 스크립트에 경고로 표시되지 않아 붙어 있습니다. 버튼을 클릭하면 JavaScript 함수가 호출되고 http 요청이 비동기 적으로 전송됩니다.JavaScript에서 서블릿 응답이 표시되지 않는 이유

응답에 문자열이 표시되지 않는 이유를 모르겠습니다. 누구든지이 문제를 해결할 수있는 모든 빛에 감사드립니다.

EDIT : 또한 "get"요청을 보낸 후 상태 코드 200이 표시됩니다. 콘솔 아래에있는 방화 녀석을 보면 200 개의 상태 코드가있는 Get 요청을 볼 수 있습니다. Params, Headers 및 XML의 3 가지 탭이 있습니다. Params 아래에서 요청시 보내는 더미 매개 변수가 표시됩니다. 머리글 아래에 응답 머리글과 요청 머리글 인 의 두 노드가 있습니다. Response Header 노드를 확장하면 content-length라는 항목 뒤에 0이 표시됩니다. 그건 내 반응에 아무것도 없다는 뜻인가요 ??? 여기

내 HTML

<html> 
<head> 
    <title>Boards 'R' Us</title> 
    <link rel="stylesheet" type="text/css" href="boards.css" media="screen" /> 
    <script type="text/javascript" src="ajax.js"> </script> 
    <script type="text/javascript" src="text-utils.js"> </script> 
    <script type="text/javascript" src="boards.js"> </script> 
</head> 

<body> 
    <h1>Boards 'R' Us :: How Much Butt We're Kicking</h1> 
    <div id="boards"> 
    <table> 
    <tr><th>Snowboards Sold</th> 
    <td><span id="boards-sold">1672</span></td></tr> 
    <tr><th>What I Sell 'em For</th> 
    <td>$<span id="boards-price">249.95</span></td></tr> 
    <tr><th>What it Costs Me</th> 
    <td>$<span id="boards-cost">84.22</span></td></tr> 
    </table> 
    <table> 
    <tr><th>Boots Sold</th> 
    <td><span id="boots-sold">312</span></td></tr> 
    <tr><th>What I Sell 'em For</th> 
    <td>$<span id="boots-price">175.47</span></td></tr> 
    <tr><th>What it Costs Me</th> 
    <td>$<span id="boots-cost">54.23</span></td></tr> 
    </table> 
    <table> 
    <tr><th>Bindings Sold</th> 
    <td><span id="bindings-sold">82</span></td></tr> 
    <tr><th>What I Sell 'em For</th> 
    <td>$<span id="bindings-price">146.92</span></td></tr> 
    <tr><th>What it Costs Me</th> 
    <td>$<span id="bindings-cost">98.03</span></td></tr> 
    </table> 
    <h2>Cash for the Slopes: 
    $<span id="cash">318936.42</span></h2> 
    <form> 
    <input value="Show Me the Money" type="button" 
      onClick="getNewTotals();" /> 
    </form> 
    </div> 
</body> 
</html> 

내 자바 스크립트

function getNewTotals() { 
    console.log("Getting new totals"); 
    var url = "boards.do"; 
    url = url + "?dummy=" + new Date().getTime(); 
    request.open("GET", url, true); 
    request.onreadystatechange = updatePage; 
    request.send(null); 
} 

function updatePage() { 
    if (request.readyState == 4) { 
     if (request.status == 200) { 
      var reply = request.responseText; 
      alert("returned: " + reply); 
     } else { 
      alert("Error! Request status = " + request.status); 
     } 
    } 
} 

내 서블릿이다

import java.io.IOException; 
import java.io.PrintWriter; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import com.gmail.gmjord.controller.BoardSalesController; 

/** 
* Servlet implementation class BoardSalesController 
*/ 
//@WebServlet("/BoardSalesController") 
public class BoardSalesController extends HttpServlet { 
    private static final long serialVersionUID = 1L; 
    private static final Logger LOGGER = Logger.getLogger(BoardSalesController.class.getClass().getName()); 
    private static final Level INFO = Level.INFO; 
    private static final Level[] LEVELS = {Level.SEVERE, Level.WARNING, Level.INFO, Level.CONFIG, 
     Level.FINE, Level.FINER, Level.FINEST}; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public BoardSalesController() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     LOGGER.log(INFO, "in doGet()"); 
     String info = request.getParameter("dummy"); 
     LOGGER.log(INFO, "Request info: " + info); 
     response.setContentType("text/plain"); 
     response.setCharacterEncoding("UTF-8"); 
     String reply = "Do you see this?"; 
     response.getWriter().write(reply); 


    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
    } 

} 
+0

글쎄, 무슨 일이 일어나고있는거야? 디버거에서 실행하고 네트워크 트래픽을 관찰하십시오. updatePage에 중단 점을 넣고 호출되는 방법과 방법을 확인하십시오. – Malvolio

+0

Chrome 또는 Firefox 개발 도구 또는 방화 광구를 사용해 XMLHttpRequest 트래픽을 확인하고 그 결과를 확인할 수 있습니다. 또한 200 번과 다른 응답 상태를 확인할 수도 있습니다 (404 또는 500 오류가 생성되었을 수 있음) –

+0

@Malvolio, JavaScript를 디버깅 할 수 있음을 상기시켜 주셔서 감사합니다. 나는 방화 광에서 그것을 디버깅했고 request.responseText는 ""값을 보여줍니다. 그래서 나는 어떻게 든 서블릿이 응답을 제대로 보내지 않는다고 생각한다. 아직도 조사 중이 야. – mitchj

답변

1

내가 올바르게 servlet를 호출에 응답을 받고있어 이해 http-header status = 200이지만 str을받지 못했습니다. 콘텐츠가 아닌가요?

그러면 응답을 작성하려면 작가에게 flush() (으)로 전화해야한다고 생각합니다. 당신이 볼 수 javax.servlet.http.HttpServletResponse의 인터페이스입니다 javax.servlet.ServletResponsedocumentationgetWriter()을 선택하면 :

의 PrintWriter에 플러시()를 호출 응답을 얻어냅니다. 이 도움이

String reply = "Do you see this?"; 
PrintWriter writer = response.getWriter(); 
writer.write(reply); 
writer.flush(); 

희망,

: servlet container 그렇게 서블릿에 doGet 방법이 코드로 시도하지 보인다 귀하의 경우 그러나, 당신을 위해 그렇게 때문에

그러나 이것은 일반적으로 필요하지 않습니다

+0

나는이 방법을 시도하고 도움이되지 않았다. 나는 어떤 일이 일어 났는지 확신 할 수 없지만, 몇 시간에 걸쳐 그것을 알아 내려고 시도한 후에, 신비하게 일하기 시작했습니다. 가끔은 모든 JavScripts 등을로드하지 않는 웹 앱을 실행하려고 시도하는 데있어 신비한 사건이 있었지만 마술처럼 다시 시작했습니다. 나를 도와 주려고 투표하고 있습니다! 고맙습니다!! 나는 모두를 투표 할 수 있으면 좋겠다. – mitchj

+0

감사합니다':)'.처음에는 정상적으로 서블릿 컨테이너가'flush()'를하기 때문에 나에게 이상하게 들릴지 모르지만, 응답을 시도 할 때 무언가 현장에서 일어날 수 있습니다. 이상한 일이 생길 때 슬프지만 어쩌면 웹 컨테이너':)'를 새로 설치할 수도 있습니다. – albciff

관련 문제