2012-03-11 6 views
1

私が書いたチェッカーゲームのユーザー名、パスワード、勝敗を表示するサーブレットをセットアップしました。私はこのページにアクセスするためのajaxプログラムを作成して、単純なリーダーボードのようなユーザーの勝敗を列挙したテーブルを作成したいと考えています。しかし、私のHTMLコードは動作しませんし、なぜ私は見ることができません。私は、変数urlとしてリストしたページにログインし、サーブレットからxmlファイルを見ることができます。どんな助けでも大歓迎です。ここAJAXを学ぶ、htmlコードは何もしません

<html> 
<head> 
<script type="text/javascript"> 
function requestUpdate() 
{ 
    var req = newXMLHttpRequest(); 
    req.onreadystatechange = function() 
    { 
     if(req.readyState == 4) 
     { 
      displayResult(req); 
     } 
    } 
    var url = "http://localhost:8080/Checkers/CheckersServlet"; 
    req.open("GET",url,true); 
    req.send(null); 
} 

function displayResult(req) 
{ 
    var div = document.getElementById("Scoreboard"); 
    div.innerHTML = "<table border> <tr> <th> Username </th> <th> Wins </th> <th> Losses </th> </tr>" ; 

    var doc = req.responseXML; 
    var Users = doc.getElementsByTagName('Username'); 
    var Wins = doc.getElementsByTagName('Wins'); 
    var Losses = doc.getElementsByTagName('Losses'); 
    var U; 
    var W; 
    var L; 
    for(var i = 0; i < Users.length; i++) 
    { 
     U = Users.item(i).textContent; 
     W = Wins.item(i).textContent; 
     L = Losses.item(i).textContent; 

     div.innerHTML = div.innerHTML + "<tr> <td>" + U + "</td> <td>" + W + "</td> <td>" + L + "</td> </tr>"; 
    } 

div.innerHTML = div.innerHTML + "</table>"; 
} 
</script> 
</head> 
<body onload = "requestUpdate()"> 
    <button onclick = "requestUpdate()">Update</button> 
    <div id = "Scoreboard"></div> 
</body> 

サーブレットコードが

import java.io.IOException; 
import java.io.FileReader; 
import java.io.BufferedReader; 
import java.io.PrintWriter; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

/** 
* Servlet implementation class CheckersServlet 
*/ 
@WebServlet("/CheckersServlet") 
public class CheckersServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 


/** 
* @see HttpServlet#HttpServlet() 
*/ 
public CheckersServlet() { 
    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 
    response.setContentType("text/xml"); 
    PrintWriter out = response.getWriter(); 
    out.println("<?xml version='1.0'?>"); 

    BufferedReader fReader = new BufferedReader(new FileReader("/Users/adamsturge991/desktop/checkersdatabase.txt")); 
    String data = fReader.readLine(); 
    out.println("<CheckersData>"); 
    while(data != null) 
    { 
     out.println("<User>"); 
     out.println("<Username>"); 
     out.println(data); 
     out.println("</Username>"); 
     data = fReader.readLine(); 
     out.println("<Password>"); 
     out.println(data); 
     out.println("</Password>"); 
     data = fReader.readLine(); 
     out.println("<Wins>"); 
     out.println(data); 
     out.println("</Wins>"); 
     data = fReader.readLine(); 
     out.println("<Losses>"); 
     out.println(data); 
     out.println("</Losses>"); 
     out.println("</User>"); 
     data = fReader.readLine(); //get next username or null if end of database 
    } 
    out.println("</CheckersData>"); 
} 

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

}

+0

あなたはhttp://www.jquery.comになっているはずです。それはあなたのためにこれのほとんどを簡素化します。 – Ariel

答えて

3

でこの行:

var req = newXMLHttpRequest(); 
ので、 new後にスペースが必要

var req = new XMLHttpRequest(); 

(注もそれが継続的にあなたのdisplayResult()機能でdiv.innerHTMLを更新することは良好な性能を与えることはありません。文字列変数に必要なHTMLを構築して、最後にその変数に等しいdiv.innerHTMLを設定した方が良い)

+0

ありがとう!私のコードはvar Users = doc.getElementsByTagName( 'Username');で終了するようです。私は確認して、アダムのようなURLの行があります。どのようなアイデアが起こっている? var doc = req.responseXMLがnullであるように見えますが、何が起こるかを見るためにdocument.write(doc)を試してみました。私はdocument.write()が文字列を取ることを意図していることを知っていますので、何も意味しないかもしれません –

+0

サーブレットからの応答がMIMEタイプ "text/xml"を持っていますか? (また、 'document.write()'でデバッグしようとするのではなく、 'console.log()'を試してブラウザのコンソールを開いて、結果を確認してください。例えば、Chromeの組み込み開発ツールを使用するctrl-shift-Jです。 – nnnnnn

+0

私はサーブレットコードも投稿します –

2

この行:。

var req = newXMLHttpRequest(); 

は次のようになります。

var req = new XMLHttpRequest(); 

そして、これライン:

var doc = req.responseXML; 

は次のようになります。

var doc = req.responseText; 

更新:

var doc = req.responseText; 

/*This is for making XML doc, otherwise `getElementsByTagName` wont work*/ 
if (window.DOMParser) 
{ 
    parser=new DOMParser(); 
    xmlDoc=parser.parseFromString(doc,"text/xml"); 
} 
else // Internet Explorer 
{ 
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
    xmlDoc.async=false; 
    xmlDoc.loadXML(doc); 
} 

/*XML DOC is ready, now parse it with `getElementsByTagName1`*/ 
var Users = xmlDoc.getElementsByTagName('Username'); 
var Wins = xmlDoc.getElementsByTagName('Wins'); 
var Losses = xmlDoc.getElementsByTagName('Losses'); 
+0

サーブレットによって書かれたファイルはXMLファイルです。その場合にはまだresponseceextを使用する必要がありますか? –

+0

さて、あなたのコードは私のために働いた。更新部分を参照してください。 – tusar

+0

それをやった後でも、Users.lengthが0であることを今私に伝えています。一口を試してみると –

関連する問題