我正在閱讀一本書來學習ajax,而且我陷入了僵局,因爲我的JavaScript中沒有在alert中顯示我的Servlet響應(只是文本)。當按鈕被點擊時,它會調用JavaScript函數,然後異步發送一個http請求。爲什麼servlet響應沒有在我的JavaScript中顯示
我不明白爲什麼字符串沒有顯示在響應中。感謝任何人都可以解決這個問題。
編輯:另外,發送「獲取」請求後,我得到一個200的狀態代碼。當我看着控制檯下的螢火蟲時,我看到帶有200個狀態碼的Get請求。有3個選項卡 - Params,Headers和XML。在參數下,我看到了我在請求中發送的虛擬參數。在標題下有2個節點 - 響應標題和請求標題。當我展開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>
和我的JavaScript
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);
}
}
}
和我的servlet
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 2014-10-16 21:43:17
您可以使用Chrome或Firefox開發工具甚至是螢火蟲來檢查XMLHttpRequest流量,並檢查它會發生什麼。您還可以檢查除200以外的其他響應狀態(也許正在生成404或500錯誤) – 2014-10-16 22:31:01
@Malvolio,感謝您提醒我,我可以調試JavaScript - 在此處仍是新的。我調試它在firebug和request.responseText顯示「」的值。所以我認爲Servlet不會正確地發送響應。仍在調查。 – mitchj 2014-10-17 11:23:35