我看了很多关于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}}都可以工作。我只是想知道如何将函数发送到只链接到file.js (就像上面的jquery ),而不是直接放在里面的函数。"{{...}}“将无法工作,因为我已经检查过了。我想我必须找到一些Python的模块,或者使用AJAX,除非我不知道从哪里开始。
发布于 2013-02-18 07:55:12
答案是"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。
发布于 2013-02-18 05:15:54
你必须使用AJAX。在服务器端,您只需要一个以JSON格式返回数据的URL。在客户端,我建议您对AJAX请求使用jQuery。只需使用jQuery从服务器请求数据,并将数据呈现到DOM中。
https://stackoverflow.com/questions/14922657
复制相似问题