【发布时间】:2020-06-15 12:49:41
【问题描述】:
我正在使用flask、javascript 和socketio 创建一个投票网络应用程序。我正在遍历属于vote 类的所有按钮。我正在尝试获取他们的数据投票值。出于某种原因,当单击按钮时为按钮打印 dataset.vote(如下面的函数中指定)时,它会在单击两个按钮时输出最后一个按钮的 dataset.vote。有人可以指出我的错误并帮助我解决它吗?如果您需要我指定某些内容,我很乐意这样做。
烧瓶:
from flask import Flask, render_template
from flask_socketio import SocketIO, emit
app = Flask(__name__)
sock =SocketIO(app)
@app.route("/")
def index():
return render_template("index.html")
@sock.on("cast_vote")
def f(data):
vote = data["vote"]
print(vote)
emit("vote_result", {"vote":vote}, broadcast=True)
HTML:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<title>SocketIO</title>
<script src="https://cdn.jsdelivr.net/npm/socket.io-client@2/dist/socket.io.js"></script>
<script src="{{url_for('static', filename='main.js')}}"></script>
</head>
<body>
<ul id="main"></ul>
<button class="vote" data-vote="no">No</button>
<button class="vote" data-vote="yes">Yes</button>
</body>
</html>
Javascript:
document.addEventListener("DOMContentLoaded", ()=>{
var sock = io.connect(location.protocol+"//"+document.domain+":"+location.port)
sock.on("connect", ()=>{
buttons = document.querySelectorAll(".vote");
let i;
for(i=0; i<buttons.length; ++i){
button = buttons[i];
button.onclick = () => {
console.log(button.dataset.vote);
let vote = button.dataset.vote;
console.log(vote);
sock.emit("cast_vote", {"vote":vote});
};
}
});
sock.on("vote_result", (data)=>{
newli = document.createElement("li");
newli.innerHTML=data["vote"]
document.querySelector("#main").append(newli);
});
});
输出:
yes
yes
yes
yes
【问题讨论】:
标签: javascript python html flask socket.io