我想用innerHTML
列出每条消息。 如果我不必使用innerHTML
,我可以轻松地执行以下操作。
<div>
<% for (var i = 0; i < messages.length; i++) { %>
<p><%= messages[i] %></p>
<% } %>
</div>
我必须为此目的使用innerHTML
的原因是我有 React.js 代码被 webpack 最小化,所以我不能将 ejs 代码放在 React 代码中我想要的位置。 为了解决这个问题,我需要在 React 代码中放入id
,以便我可以将消息放置在我想要的位置。所以我尝试了以下内容。
反应代码:
<div id="messagesGoHere"></div>
index.ejs Code:
<script>
<% for (var i = 0; i < messages.length; i++) { %>
document.getElementById("messagesGoHere").innerHTML += "<p><%= messages[i] %></p>";
<% } %>
</script>
这返回错误说
未捕获的语法错误:无效或意外的令牌
我使用 node.js、express 和 redis 来存储消息。
我感谢任何建议。
更新:
以下是我呈现messages
对象的方式。
app.get('/', function (req, res) {
// Get messages
client.lrange('chat:messages', 0, -1, function (err, messages) {
if (err) {
console.log(err);
} else {
// Get messages
var message_list = [];
messages.forEach(function (message, i) {
message_list.push(message);
});
// Render page
res.render('index', { messages: message_list });
}
});
});
注意事项:
- 我在问题中提供的第一段不依赖于
innerHTML
的代码绝对可以正常工作,这证明我的服务器端代码是正确的。 - 至于
<script>
标签中的 ejs 代码,如果我不使用i
变量,而是使用像这样"<p><%= messages[0] %></p>"
0
,它成功地返回了第一条消息,数量与 for 循环的计数一样多,这也证明了我的服务器端代码正在工作。 - 问题是for 循环以及ejs 和 innerHTML 的使用。不是我的服务器端代码或任何其他代码。
将消息分配给 JavaScript 变量
<script>
var msgs= <%=messages %>
for (var i = 0; i < msgs.length; i++) {
document.getElementById("messagesGoHere").innerHTML += "<p>msgs[i] </p>";
}
</script>
好吧,我在这个问题上完全迷失了方向,但最终还是让它工作了。
首先,我的任何代码都没有错。
正如我最初认为的那样,以下代码片段是正确的。
<script>
<% for (var i = 0; i < messages.length; i++) { %>
document.getElementById("messagesGoHere").innerHTML += "<p><%= messages[i] %></p>";
<% } %>
</script>
在我删除了messages
的 redis 数据并重新创建新数据后,它起作用了。
所以我相信我的 redis 数据中有一些阻碍
。对于不了解真正的问题,我深表歉意。
我还要感谢在这篇文章中帮助我的所有人。