μ΄ μμ μμλ νμΌ μ λ‘λ μμμ μμ±νκ³ Ajaxλ₯Ό ν΅ν΄ μ μΆνλ λ°©λ²κ³Ό ν¨κ» μ§ν μν©μ νμνλ μ§ν λ§λλ₯Ό ꡬννλ λ°©λ²μ 보μ¬μ€λλ€.
μ¬κΈ°μλ λ κ°μ§ ꡬν λ°©μμ μκ°ν©λλ€. νλλ μμ JavaScriptλ₯Ό μ¬μ©ν λ°©μμ΄κ³ , λ€λ₯Έ νλλ hyperscriptλ₯Ό μ¬μ©ν λ°©μμ λλ€.
λ¨Όμ μμ JavaScript λ²μ μ λλ€.
multipart/form-data
νμ
μ νΌμ μ¬μ©ν©λλ€./upload
λ‘ POST μμ²μ 보λ
λλ€.progress
μμκ° μμ΅λλ€.htmx:xhr:progress
μ΄λ²€νΈλ₯Ό λ£κ³ , μ΄λ²€νΈμ loaded
λ° total
μμ±μ λ°λΌ μ§ν λ§λμ value
μμ±μ μ
λ°μ΄νΈν©λλ€.<form id='form' hx-encoding='multipart/form-data' hx-post='/upload'>
<input type='file' name='file'>
<button>
Upload
</button>
<progress id='progress' value='0' max='100'></progress>
</form>
<script>
htmx.on('#form', 'htmx:xhr:progress', function(evt) {
htmx.find('#progress').setAttribute('value', evt.detail.loaded/evt.detail.total * 100)
});
</script>
Hyperscript λ²μ μ λ§€μ° μ μ¬νμ§λ§ λ€μκ³Ό κ°μ μ°¨μ΄κ° μμ΅λλ€:
<form hx-encoding='multipart/form-data' hx-post='/upload'
_='on htmx:xhr:progress(loaded, total) set #progress.value to (loaded/total)*100'>
<input type='file' name='file'>
<button>
Upload
</button>
<progress id='progress' value='0' max='100'></progress>
</form>
μ°Έκ³ λ‘, hyperscriptλ details
μ μμ±μ λ³μλ‘ μ§μ ꡬ쑰 λΆν΄ ν λΉν μ μμ΅λλ€.