back
htmx で、レスポンスjsonをパース後 次の処理分岐する
id: 59, 2024-08-08
概要:
- 前scrapの続編で、 htmx + astroの関連メモとなります。
- post 受信後の、エラー分岐方法など検討した内容になります。
- htmx機能(hx-xxx 属性) に、JS処理を追加して。機能を拡張する例です。
[ 作成日: 2024/07/11 ]
環境
- htmx
- astro 4.11
- vercel
- 前実装した、ログインAPIからのレスポンスjsonを、エラー処理
https://github.com/kuc-arc-f/astro4_2htmx/blob/main/example/simple_auth/src/pages/login.astro
- hx-post: post送信
- hx-target: レスポンスデータ
- hx-on: post受信後のJS実行
<form
hx-post="/api/auth/user_login"
hx-trigger="submit"
hx-target="#resulte_form1"
hx-on="htmx:afterRequest: Login.afterPostForm1()"
>
<h1 class="text-4xl font-bold my-2">Login!</h1>
<hr class="my-1" />
<label class="text-2xl font-bold my-2">Email:</label>
<input type="text" id="email" name="email"
class="input_text" />
<hr class="my-2" />
<label class="text-2xl font-bold my-2">Password:</label>
<input type="text" id="password" name="password"
class="input_text" />
<hr class="my-2" />
<button type="submit" class="btn-purple" >Login
</button>
</form>
<div id="resulte_form1" class="d-none">ここに表示</div>
- post受信後の、id=resulte_form1 の、htmlにjsonが設定され。
<div id="resulte_form1" class="d-none" data-astro-cid-sgpqyurt="">{"ret":false,"resulte_code":400,"data":{},"appName":"astro4_2"}</div>
- POST受信後の処理、afterPostForm1
https://github.com/kuc-arc-f/astro4_2htmx/blob/main/example/simple_auth/public/js/Login.js
- id指定、innerHTMLでJSON取得
- resulte_codeで、分岐
- 分岐処理内で、エラー処理、次処理実行。
const resulte_form1 = document.querySelector("#resulte_form1");
if(!resulte_form1){
return;
}
const htm = resulte_form1.innerHTML;
const obj = JSON.parse(htm);
console.log(obj);
if(obj.resulte_code) {
console.log("resulte_code=", obj.resulte_code);
if(obj.resulte_code === 200) {
//TODO
// alert("Success, Login");
}else{
alert("Error, Login");
}
}