ボタンをクリックされたときに$.ajaxとServletで非同期通信を行いたいです。
しかし
$(function() {
});
の中には$.ajaxのほかにも
・ボタンをクリックしたときにカウントダウンを行う
・DOM操作を行う
などいろいろやっているせいなのかAjaxが通信を行いません
どうすればいいか途方にくれたのでアドバイスをお願いします!
自分的に怪しいと思うところがありまして
途中でIDが「answerButton」のボタンをDOM操作で作成していて
そのボタンを押すことが通信開始のイベントリスナーとなっています。
同じ
$(function() {
});
のなかでAjax通信のきっかけとなるボタンの作成はまずかったのか?
と思っております
index.html
1<!DOCTYPE html> 2<html> 3 4<head> 5 <meta charset="UTF-8"> 6 <title>10分以内に質問に答えよう!</title> 7</head> 8 9<body> 10<h1 id="title">10分以内に質問に答えよう!</h1> 11 <nav> 12 <ul id="time"></ul> 13 <ul id="question"></ul> 14 </nav> 15 16 <p> 17 <button id="startButton">スタート</button> 18 </p> 19 20 <script src = "jquery-3.5.1.min.js"></script> 21 <script src = "index.js"></script> 22</body> 23</html>
index.js
1var timerID; 2var setTime = 600; 3 4$(function() { 5 6$("#startButton").on("click", function() { 7 timerID = setInterval(function(){ 8 if(setTime <= 0) { 9 clearInterval(timerID); 10 $("#time").html("00:00:00"); 11 } else { 12 setTime -= 0.01; 13 var min = Math.floor(setTime / 60); 14 var sec = Math.floor(setTime % 60); 15 var milli = Math.floor((setTime - Math.floor(setTime)) * 100); 16 $("#time").html((min < 10 ? "0" + min : min) + ":" + (sec < 10 ? "0" + sec : sec) + ":" + (milli < 10 ? "0" + milli : milli)); 17 } 18 }, 10); 19 }); 20 21$("#startButton").on("click", function() { 22 $("#title").remove(); 23 24 $("#question").html("今話題の「鬼滅の刃」ですが主人公の名前をフルネームで答えなさい"); 25 26 $("nav").append("<ul><input type=\"text\" id=\"input\"></ul>"); 27 28 $("#startButton").remove(); 29 30 $("p").append("<button id=\"answerButton\"></button>"); 31 32 $("#answerButton").html("答える"); 33 }); 34 35$("#answerButton").on("click", function() { 36 var data = {request : $("#input").val()}; 37 $.ajax({ 38 type : "GET", 39 scriptCharset: "UTF-8", 40 url : "http://localhost:8080/QAcountdown/urlAnswerServlet", 41 data : data 42 }).done(function(data) { 43 alert("通信成功"); 44 $("nav").append("<ul><id=\"answer\"></ul>"); 45 $("#answer").html(data); 46 $("#answerButton").remove(); 47 $("p").append("<button id=\"nextButton\"></button>"); 48 $("#nextButton").html("次へ"); 49 }).fail(function() { 50 alert("読み込み失敗"); 51 }); 52 }); 53 });
urlAnswerServlet
1package servlet; 2 3import java.io.IOException; 4import java.io.PrintWriter; 5 6import javax.servlet.ServletException; 7import javax.servlet.annotation.WebServlet; 8import javax.servlet.http.HttpServlet; 9import javax.servlet.http.HttpServletRequest; 10import javax.servlet.http.HttpServletResponse; 11 12@WebServlet(urlPatterns={"/urlAnswerServlet"}) 13public class urlAnswerServlet extends HttpServlet { 14 15 private static final long serialVersionUID = 1L; 16 17 public urlAnswerServlet() { 18 super(); 19 } 20 21 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 22 try { 23 String response1; 24 //パラメータ取得 25 String param1 = request.getParameter("request"); 26 //処理 27 if(param1.equals("竈門炭治郎")) { 28 response1 = "正解です。答えは「竈門炭治郎」でした"; 29 } else { 30 response1 = "違います。答えは「竈門炭治郎」でした"; 31 } 32 33 //ヘッダ設定 34 response.setContentType("text/html; charset= UTF-8"); //JSON形式, UTF-8 35 36 //pwオブジェクト 37 PrintWriter pw = response.getWriter(); 38 39 //出力 40 pw.print(response1); 41 42 //クローズ 43 pw.close(); 44 45 } catch(Exception e) { 46 e.printStackTrace(); 47 } 48 } 49}
回答1件
あなたの回答
tips
プレビュー