javascript - 在 JavaScript 中提交表单后动态内容不更新
问题描述
它在我再次点击保存按钮后显示,所以基本上它落后了一步,它更新数据库但在第二次点击后加载。我的代码肯定有问题:
const fetchTweets = async () => {
let tweets = await axios.get(url);
return tweets.data.response;
}
然后是在页面加载时调用的函数:
const showTweets = async () => {
let tweets = await fetchTweets();
let list = ''
let tweetsElement = document.querySelector('#tweets')
for(let tweet of tweets) {
list += tweetFormat(tweet);
}
tweetsElement.innerHTML = list;
}
showTweets()
但是当我使用这个提交处理表单时,即使我正在调用showTweets()函数,它也不会更新页面:
const tweetFormElement = document.querySelector('#tweet-create-form');
document.addEventListener('submit', (event) => {
event.preventDefault();
const formData = new FormData(event.target);
const url = event.target.getAttribute('action');
const method = event.target.getAttribute('method');
axios({
method: method,
url: url,
data: formData
}).then((res) => {
console.log(res);
})
showTweets() // <-- calling it here
});
当我再次单击提交时,数据显示在页面上,但随后它更新了数据库两次。请如果有人可以提供帮助。
解决方案
在加载推文之前,您无需等待请求完成。
showTweets
在里面移动.then
:
axios({
method: method,
url: url,
data: formData
}).then((res) => {
console.log(res);
showTweets()
})
此外,您可能打算将提交侦听器添加到tweetFormElement
仅而不是整个文档:
tweetFormElement.addEventListener('submit', // ...
推荐阅读
- html - 如何使用 Windows Powershell 在网页中访问基于 javascript 的对话框窗口?
- r - 计算 R 中均值的平均值
- javascript - 使用通过 npm 安装的 ES 模块,而不使用像 parcel/webpack 这样的模块打包器
- php - 获取concrete5整数属性值进行比较
- c# - 如何使用 TrackBar 降低图像的亮度?
- html - 在 Firefox 中自动完成时,所需的电子邮件输入仍处于无效状态
- selenium - 在 Selenium 和 Java 中设置查找超时
- php - 在 2 个选项卡中工作时如何修复会话过期 - Laravel 5.7
- javascript - For of loop 进行 HTTPS 地理编码 api 调用并在结果上将坐标输入 SQL 数据库,如何让 Node 的 HTTPS 模块工作?
- java - 错误 Firebase Cloud Messaging FCM,无法发送消息