0

我正在使用 google app engine 和 google docs/gdata 制作数据绘图工具,但遇到了 python/js/html 通信问题。

我想要一个非常简单的网页布局——只有一系列下拉菜单部分,然后是最终图表。我目前的困境涉及下拉菜单。

共有 4 个下拉菜单,每个的字段取决于之前的选择。我发现 JS/HTML 代码具有所有需要的逻辑,但它假定您已经预加载了所有选择字段。由于项目的规模,无法在启动时加载所有内容,并且数据是动态/变化的,所以我不能只声明包含菜单选择数据的静态文件。

目前,我有方法从谷歌文档(使用 gdata)获取我需要的所有菜单选择/数据。理想情况下,我想只调用每个系列(html selection1 -> python method1 来获取下一个选择集 -> html selection2 -> python method2 来获取下一个选择集 -> 等)但是从我可以收集的信息来看,这似乎是是不可能的(返回python,即'post',无需重新加载整个页面)。

那么,有没有办法在初始模板渲染后或不“发布”的情况下访问 google-app-engine JS 代码中的 python 变量/方法?或者,更开放地说,如果有人有见解/建议/想法,我将不胜感激。

谢谢

4

1 回答 1

1

两步流程:

  1. 创建一些服务器端代码以将您的数据以 JSON 格式返回——这是在网络上传输数据的实际方法。

  2. 在您的 javascript 代码中,调用您的服务器(从第 1 步开始),然后解析结果。使用结果填充您的下拉列表。

好消息是 Google 已经提供了 json 作为其 gdata API 的替代格式。有关如何使用 gdata 和返回 JSON 的入门知识,请参阅此链接。

对于第二部分,几乎所有的 javascript 客户端库(你真的应该使用一个)都提供了一种使用 ajax 请求数据的简单方法。由于这是一项常见任务,因此 StackOverflow 上有很多关于此的问题 -特别是这个有一个示例,向您展示如何使用 jquery 和 ajax 填充下拉列表。

假设您可以使用 javascript 并复制您的 Python 代码提供的任何功能,那么上述内容将适用于您。如果您有一些不想传输到客户端的特定逻辑,那么您的 Python 代码将不得不返回 json(实际上,您的行为就像您的 javascript 代码的 gdata api)。

由于您没有突出显示您正在使用哪个 Python 框架 - 这是一个使用flask的示例,一个用于 Python Web 开发的简单框架:

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/the-question')
def the_answer():
    return jsonify(answer=42)

AJAX with jQuery下的文档中提供了更全面的示例。

如果您使用的是 webapp2,Google 提供了出色的文档来做同样的事情。

于 2013-03-18T04:12:14.007 回答