Flask+JavaScript密码生成器:生成密码无法在网页显示
密码生成器网页显示问题修复
问题根源
你的代码里,显示密码的<p id="generated-password">被{% if password %}模板条件包裹了。初始加载页面时后端没有传password变量,导致这个<p>元素根本不会被渲染到DOM中。虽然AJAX请求能拿到密码,但JS找不到目标元素,自然没法更新页面显示。
修复步骤
调整HTML密码显示区域
去掉模板条件判断,让显示密码的元素始终存在:<div> <h2>Your generated password:</h2> <p id="generated-password">---</p> </div>简化JS的FormData逻辑
表单本身已包含length和characters字段,无需重复append,优化代码:function generatePassword() { const form = document.getElementById('password-form'); const formData = new FormData(form); fetch('/generate', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => { console.log(data.password); document.getElementById('generated-password').innerText = data.password; }) .catch(error => { console.error('Error:', error); }); }
修改后的完整index.html代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Password Generator</title> </head> <body> <h1>Password Generator</h1> <form action="/generate" method="POST" id="password-form"> <label for="length">Password Length:</label> <input type="number" id="length" name="length" required><br><br> <label for="characters">Character Set:</label> <select id="characters" name="characters"> <option value="letters">Letters</option> <option value="letters_digits">Letters and Digits</option> <option value="all">All Characters</option> </select><br><br> <input type="button" value="Generate Password" onclick="generatePassword()"> </form> <br> <br> <div> <h2>Your generated password:</h2> <p id="generated-password">---</p> </div> <script> function generatePassword() { const form = document.getElementById('password-form'); const formData = new FormData(form); fetch('/generate', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => { console.log(data.password); document.getElementById('generated-password').innerText = data.password; }) .catch(error => { console.error('Error:', error); }); } </script> </body> </html>
完成上述修改后,点击按钮生成的密码即可正常显示在网页中。
内容的提问来源于stack exchange,提问作者Rocksteady
相关产品推荐
相关产品推荐

