我浏览了关于stackoverflow,github,Google等等的许多主题,找到了许多不同的答案,尽管没有简单的答案。
我正在用JavaScript(使用melonJS引擎)编写Facebook游戏。该框架是Flask(Python)。
我正在尝试做的是能够在Python和JS代码之间发送数据,而无需刷新页面(例如数据库操作,电子邮件发送等)。我希望用户只看游戏,选择选项,玩游戏,其余的由游戏完成。
虽然我设法看到类似以下的内容将起作用:
app.py
def add(f,l,a):
g.db.execute('insert into persons (fname,lname,age) values (?, ?, ?)',
[f,l,a])
g.db.commit()
@app.route('/')
def index():
cur = g.db.execute('select fname, lname, age from persons order by id desc')
entries = [dict(fname=row[0], lname=row[1], age=row[2]) for row in cur.fetchall()]
return render_template('app.html',entries=entries,addtodb=add)
app.html
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>THE GAME</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta name="generator" content="Geany 1.22" />
<script type="text/javascript" src="jquery-1.7.1.min.js"></script>
<script type="text/javascript">
var adddb = '{{addtodb('Anne','Monk','12')}}';
</script>
</head>
<body>
{{addtodb('Allie','Monk','78')}}
<ul class=entries>
{% for entry in entries %}
<li><h2>{{ entry.fname }} {{ entry.lname|safe }} </h2> Age: {{ entry.age }}</li>
{% else %}
<li><em>Unbelievable. No entries here so far</em></li>
{% endfor %}
</ul>
</body>
</html>
并且{{addtodb}}都将起作用。
我只是想知道如何将函数发送到仅链接到HTML(而不是上面的jquery)而不直接放在其中的file.js。 “ {{...}}”将无法使用,因为我已经检查过了。
我想我必须找到一些Python模块或使用AJAX,除非我不知道从哪里开始。
最佳答案
答案是“ AJAX”,但是希望一些简化的说明可以帮助您指出正确的方向:
您需要进行某种JS事件(单击链接,单击按钮,游戏中触发事件)来触发异步调用(即不等待服务器的响应)或同步调用(即等待回听)服务器上带有请求的Flask端点(即,您设置的路由)。如果您要创建新条目,则可能是POST请求。在服务器上验证它并将其保存到数据库。
如果您还希望页面反映由于服务器对数据库的行为而发生的任何事情,则Flask端点需要返回JSON响应。由于您已经生成了页面上的HTML和JS,因此需要将JS中的函数绑定为事件侦听器,以便它查找该JSON响应,然后解析JSON并执行您放入该函数中的任何代码。
JQuery的ajax功能可以为您完成所有这些工作。 Here is an example of a jQuery AJAX POST。该示例使用PHP没关系;您通常在Flask视图中解析POST并返回jsonify(data)。 See docs on Flask.jsonify。