我已经浏览了很多关于stackoverflow,github,Google等等的主题......并且发现了许多不同的答案,尽管没有简单的答案。
我正在用JavaScript编写Facebook游戏(使用melonJS引擎)。该框架是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}}都可以。 我只是想知道如何将函数发送到file.js,它只链接到HTML(如上面的jquery),而不是直接放在里面。 “{{...}}”将无效,因为我已经检查过了。 我想我必须找到一些Python模块或使用AJAX,除了我不知道从哪里开始。
答案 0 :(得分:1)
答案是“AJAX”,但希望一些简化的细化可以帮助您指明正确的方向:
您需要制作某种JS事件(单击链接,单击按钮,在游戏中触发事件)触发异步(即不等待服务器的响应)或同步(即等待回复)使用请求调用服务器上的Flask端点(即您设置的路由)。如果您要创建新条目,那可能是POST请求。在服务器上验证它并将其保存到数据库中。
如果您还希望页面反映由于服务器对数据库的行为而发生的任何事情,则Flask端点需要返回JSON响应。由于您已经在页面上生成了HTML和JS,因此需要将JS中的函数绑定为事件侦听器,以便查找该JSON响应,然后解析JSON并执行您在函数中放入的任何代码。 / p>
JQuery的ajax功能可以帮到你。 Here is an example of a jQuery AJAX POST。这个例子使用PHP并不重要;您通常在Flask视图中解析POST并返回jsonify(数据)。 See docs on Flask.jsonify
答案 1 :(得分:0)
你必须使用AJAX。在服务器端,您只需要一个以JSON格式返回数据的URL。在客户端,我建议你使用jQuery来进行AJAX请求。只需使用jQuery从服务器请求数据并将数据呈现到DOM中。