Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Facebook上的JavaScript文件(melonJS)游戏调用Python函数(Flask)_Javascript_Python_Facebook_Flask - Fatal编程技术网

从Facebook上的JavaScript文件(melonJS)游戏调用Python函数(Flask)

从Facebook上的JavaScript文件(melonJS)游戏调用Python函数(Flask),javascript,python,facebook,flask,Javascript,Python,Facebook,Flask,我浏览了很多关于stackoverflow、github、Google和更多的主题。。。发现了许多不同的答案,虽然没有简单的答案 我正在用JavaScript(使用melonJS引擎)编写一个Facebook游戏。框架是Flask(Python) 我想做的是,能够在Python和JS代码之间发送数据,而无需刷新页面(如数据库操作、电子邮件发送等)。我希望用户只看游戏,选择选项,玩游戏,然后游戏就完成了剩下的事情 虽然我已经设法看到下面这样的东西会起作用: app.py def add(f,l,a

我浏览了很多关于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>

游戏
var adddb='{{addtodb('Anne','Monk','12')}';
{{addtodb('Allie','Monk','78')}
    {entries%%中的条目的百分比}
  • {{entry.fname}{{entry.lname | safe}}年龄:{{entry.Age}
  • {%else%}
  • 难以置信。到目前为止,这里没有参赛作品
  • {%endfor%}
而且{{addtodb}}这两个函数都可以工作。 我只是想知道如何将函数发送到file.js,它将只链接到HTML(如上面的jquery),而不是直接放在里面。{{…}}将无法工作,因为我已经检查过了。
我想我必须找到一些Python模块或者使用AJAX,除非我不知道从哪里开始。

你必须使用AJAX。在服务器端,您只需要一个以JSON格式返回数据的URL。在客户端,我建议您对AJAX请求使用jQuery。只需使用jQuery从服务器请求数据并将数据呈现到DOM中。

您必须使用AJAX。在服务器端,您只需要一个以JSON格式返回数据的URL。在客户端,我建议您对AJAX请求使用jQuery。只需使用jQuery从服务器请求数据,并将数据呈现到DOM中即可。

答案是“AJAX”,但希望一些简化的细化可以帮助您找到正确的方向:

您需要进行某种JS事件(单击链接、单击按钮、在游戏中触发事件)触发异步(即不等待服务器响应)或同步(即等待回音)调用服务器上的Flask端点(即您设置的路由),并发出请求。如果您正在创建一个新条目,那可能是一个POST请求。在服务器上验证并将其保存到数据库

如果您还希望页面反映由于服务器对数据库的行为而发生的任何事情,那么Flask端点需要返回JSON响应。由于您已经生成了页面上的HTML和JS,因此JS中的函数需要绑定为事件侦听器,以便它查找JSON响应,然后解析JSON并执行您在函数中输入的任何代码

JQuery的ajax功能可以为您做到这一切。示例使用PHP并不重要;您通常在Flask视图中解析POST并返回jsonify(数据)

答案是“AJAX”,但希望一些简化的阐述能帮助您找到正确的方向:

您需要进行某种JS事件(单击链接、单击按钮、在游戏中触发事件)触发异步(即不等待服务器响应)或同步(即等待回音)调用服务器上的Flask端点(即您设置的路由),并发出请求。如果您正在创建一个新条目,那可能是一个POST请求。在服务器上验证并将其保存到数据库

如果您还希望页面反映由于服务器对数据库的行为而发生的任何事情,那么Flask端点需要返回JSON响应。由于您已经生成了页面上的HTML和JS,因此JS中的函数需要绑定为事件侦听器,以便它查找JSON响应,然后解析JSON并执行您在函数中输入的任何代码


JQuery的ajax功能可以为您做到这一切。示例使用PHP并不重要;您通常在Flask视图中解析POST并返回jsonify(数据)

非常感谢你的回答。在你的帮助和其他一些帖子的帮助下,我开始尝试解决这个问题,但我对Flask有一个问题。我应该将带有功能代码的文件放在项目文件夹的何处?因为当我将函数放在主文件夹的test.py中并放置“url:test.py”时,它总是在localhost:5000/test.py中搜索文件(我使用foreman进行测试)。我总是得到404-找不到。My.js文件位于/static文件夹中。Flask构建在Werkzeug之上,Werkzeug充当“网关”。这与编写一次性脚本不同。您正在创建一个Flask应用程序,该应用程序将听取浏览器的请求并决定执行什么操作。因此,当您像那样指向test.py时,不会发生任何事情,因为那里没有提供任何文件。您需要创建一个并指向它。您应该真正阅读全部,最好是整个烧瓶文档。这不像写脚本。谢谢你的帮助。我终于找到了解决办法,可以继续工作了。:)非常感谢你的回答。在你的帮助和其他一些帖子的帮助下,我开始尝试解决这个问题,但我对Flask有一个问题。我应该将带有功能代码的文件放在项目文件夹的何处?因为当我将函数放在主文件夹的test.py中并放置“url:test.py”时,它总是在localhost:5000/test.py中搜索文件(我使用foreman进行测试)。我总是得到404-找不到。My.js文件位于/static文件夹中。Flask构建在Werkzeug之上,Werkzeug充当“网关”。这与编写一次性脚本不同。您正在创建一个Flask应用程序,该应用程序将听取浏览器的请求并决定执行什么操作。因此,当您像那样指向test.py时,不会发生任何事情,因为那里没有提供任何文件。您需要创建一个并指向它。你真的应该通读全文,更喜欢