아약스를 배우기 위해 책을 읽는 중입니다. 내 서블릿 응답 (텍스트 만)이 자바 스크립트에 경고로 표시되지 않아 붙어 있습니다. 버튼을 클릭하면 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
}
}
글쎄, 무슨 일이 일어나고있는거야? 디버거에서 실행하고 네트워크 트래픽을 관찰하십시오. updatePage에 중단 점을 넣고 호출되는 방법과 방법을 확인하십시오. – Malvolio
Chrome 또는 Firefox 개발 도구 또는 방화 광구를 사용해 XMLHttpRequest 트래픽을 확인하고 그 결과를 확인할 수 있습니다. 또한 200 번과 다른 응답 상태를 확인할 수도 있습니다 (404 또는 500 오류가 생성되었을 수 있음) –
@Malvolio, JavaScript를 디버깅 할 수 있음을 상기시켜 주셔서 감사합니다. 나는 방화 광에서 그것을 디버깅했고 request.responseText는 ""값을 보여줍니다. 그래서 나는 어떻게 든 서블릿이 응답을 제대로 보내지 않는다고 생각한다. 아직도 조사 중이 야. – mitchj