- ベストアンサー
JavascriptとServletの連携方法
- JavascriptとServletの連携方法について学習中ですがうまくいきません。年齢を計算するプログラムで、計算ボタンを押しても反応がありません。ソースコードを修正したり他のサイトを参考にしても解決できません。どのように動くのかを知りたいので、この形を維持しての実装方法を教えてください。
- NenreiJSP.jspとNenreiServlet.javaとNenrei.jsの連携方法について教えてください。年齢を計算するプログラムを作成していますが、計算ボタンを押しても年齢が表示されません。ソースコードは正しいと思いますが、何が原因でしょうか?ご教授願います。
- JavascriptとServletを連携して年齢を計算するプログラムを作成していますが、正しく動作しません。計算ボタンを押しても年齢が表示されず、他のサイトや質問サイトも参考にしましたが解決策が見つかりません。このコードの問題点や改善方法を教えていただけないでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> ageに値を表示もされませんでした。 > inputタグに反映されない理由なんなのかわかりません。 <input type="text" id="age"> とINPUTタグを利用されているので、 document.getElementById("age").innerHTML = xhr.responseText; ではINPUTタグの value を書き換えられません。 document.getElementById("age").value = xhr.responseText; にするとINPUTタグの value を書き換えられます。 innerHTML は開始タグと終了タグの間を書き換えます。 <p id="age"> </p> ならば innerHTML で処理します。
その他の回答 (2)
- t_ohta
- ベストアンサー率38% (5238/13705)
> var year = document.getElementById("year"); > のように修正し それだと変数に id が year のエレメントオブジェクトが入ってしまい、INPUTタグに入力された値が送信できません。 var year = document.getElementById("year").value; としないとダメでしょう。
補足
なるほど、ありがとうございます! 早速ご指摘の形に直して実行したところ、エラーをはきませんでした。 ageに値を表示もされませんでした。 function get(){ var year = document.getElementById("year").value; console.log("1"); xhr = new XMLHttpRequest(); console.log("2"); xhr.onload = setResponseText; console.log("3"); xhr.open("GET", "/ApiTest/NenreiServlet?year=" + year,true); console.log("4"); xhr.send(); } function setResponseText(){ document.getElementById("age").innerHTML = xhr.responseText; console.log("5"); } このようにconsole.logを使用してみたところ、問題なく1~5まで出力されました。 inputタグに反映されない理由なんなのかわかりません。 知恵をお貸しください。お願いいたします。
- t_ohta
- ベストアンサー率38% (5238/13705)
JavaScriptから入力した年を送ろうとしているのだと思いますが、xhr.open の中で使用している year という変数がJavaScript内で定義されていないので、値が送られていないのだと思います。
補足
ご回答ありがとうございます。確かに抜けておりました。jsの二行目を var year = document.getElementById("year"); のように修正し再実行したところ、jsの13行目xhr.send();でエラー400が出ていることがわかりました。 調べてみたのですが、.send()の役割がよくわかりません。 どのようにしたら解決できるでしょうか。 何度も申し訳ございませんが、お願いいたします。
お礼
で、できました!もう何日悩んだかわからないレベルのものが解決しました! JSON形式のまま表示されるので、あとはJSON.parseかなって感じです。 ありがとうございました!