CakePHP5入門【WebAPI編⑦】JavaScriptから利用
B美
まずは「get_ymd1」メソッドのほうからね
A子
|
<select id="year">
<option value="1994">1994年</option> <option value="1995">1995年</option> <option value="1996">1996年</option> ・・・(省略)・・・ <option value="2024">2024年</option> <option value="2025">2025年</option> <option value="2026" selected>2026年</option> </select> <select id="month"> <option value="1" selected>1月</option> <option value="2">2月</option> <option value="3">3月</option> ・・・(省略)・・・ <option value="10">10月</option> <option value="11">11月</option> <option value="12">12月</option> </select> <select id="day"> <option value="1" selected>1日</option> <option value="2">2日</option> <option value="3">3日</option> ・・・(省略)・・・ <option value="29">29日</option> <option value="30">30日</option> <option value="31">31日</option> </select> |
C菜
| <button id="btn1">当選番号を取得</button> |
B美
そうねぇ、テーブルが良いかしら
A子
|
<table border="1">
<tr><th>実施回</th><td id="lottery_time"></td></tr> <tr><th>抽選日</th><td id="lottery_date_str"></td></tr> <tr><th>曜日</th><td id="lottery_week_str1"></td></tr> <tr><th>六曜</th><td id="lottery_rokuyo_str"></td></tr> <tr><th>ナンバーズ3の当選番号</th><td id="num3_str"></td></tr> <tr><th>ナンバーズ4の当選番号</th><td id="num4_str"></td></tr> </table> |
C菜
|
<style>
table th { width:200px; padding: 10px; color: white; background: black; text-align: center; } table td { width:250px; padding: 10px; text-align: center; } </style> |
B美
あ、開発環境では「html」ディレクトリの直下に置いたから、URLは下記の通りね
| http://192.168.1.205/apitest01.html |
A子
B美
|
document.getElementById('btn1').addEventListener('click', function () {
const y = document.getElementById('year').value; const m = document.getElementById('month').value; const d = document.getElementById('day').value; const url = `http://192.168.1.205/numapp/api/get_ymd1/${y}/${m}/${d}`; fetch(url) .then(res => res.json()) .then(data => { if (data.status.code == 200) { //OK document.getElementById('lottery_time').textContent = "第" + data.result.lottery_time + "回"; document.getElementById('lottery_date_str').textContent = data.result.lottery_date_str; document.getElementById('lottery_week_str1').textContent = data.result.lottery_week_str1; document.getElementById('lottery_rokuyo_str').textContent = data.result.lottery_rokuyo_str; document.getElementById('num3_str').textContent = data.result.num3_str; document.getElementById('num4_str').textContent = data.result.num4_str; } else { //NG alert(data.status.message); } }) .catch(error => { //通信エラー alert("通信エラー"); }); }); |
このあたりは(難しく考えずに)定型的な記述だと思っておけば良いわよ
C菜
B美
案外、簡単でしょ?
A子
ま、まぁ良いや
ブラウザで実行確認してみよう
・・・(ドロップダウンリストを選択してから「当選番号を取得」ボタンを押す)・・・
おぉ、2026年2月27日の情報が表示されたよ
B美
(リンクをクリックすると別ウィンドウで開きます)
| const url = `https://friction-river.jp/numapp/api/get_ymd1/${y}/${m}/${d}`; |
A子
んじゃ、次は「get_ymd2」メソッドだね
C菜
| <input type="date" id="date"> |
この一文で「日付選択」は完成ですよ~
B美
|
1.イベントを設定するのは日付選択(idは「date」)について
2.「click」ではなく「change」イベント 3.未選択状態については何もしない 4.「encodeURIComponent」メソッドを通して引数を渡す |
全体像については、下記の通り
|
document.getElementById('date').addEventListener('change', function () {
const ymd = this.value; if (!ymd) { return; } const url = `http://192.168.1.205/numapp/api/get_ymd2/${encodeURIComponent(ymd)}`; fetch(url) .then(res => res.json()) .then(data => { if (data.status.code == 200) { //OK document.getElementById('lottery_time').textContent = "第" + data.result.lottery_time + "回"; document.getElementById('lottery_date_str').textContent = data.result.lottery_date_str; document.getElementById('lottery_week_str1').textContent = data.result.lottery_week_str1; document.getElementById('lottery_rokuyo_str').textContent = data.result.lottery_rokuyo_str; document.getElementById('num3_str').textContent = data.result.num3_str; document.getElementById('num4_str').textContent = data.result.num4_str; } else { //NG alert(data.status.message); } }) .catch(error => { //通信エラー alert("通信エラー"); }); }); |
後半部分については、先ほどの「apitest01.html」と全く同じよ
A子
| http://192.168.1.205/apitest02.html |
↓(左上のカレンダーマークをクリック)
↓(「4」をクリック)
C菜
ドロップダウンリストよりもカレンダーのほうが使い勝手が良いですね~
B美
(リンクをクリックすると別ウィンドウで開きます)
| const url = `https://friction-river.jp/numapp/api/get_ymd2/${encodeURIComponent(ymd)}`; |
A子
何というか、簡単だったね
C菜
B美
あ!
あと、トップページに表示する『WebAPI』の説明文だけど、どうすんの?
C菜
A子
B美
A子


