根据Javascript数据正确渲染页面的方法

时间:2014-05-31 03:31:24

标签: javascript python google-app-engine jinja2

我正在使用谷歌应用引擎来创建测试应用。

我有一个呈现初始网页的处理程序,其中包含一个按钮。当我点击按钮时,我想要发回一些信息,所以我使用如下的请求:

var request = { "myData": {
        "key1": value,
        "key2": value
        } };
$.ajax({
    url: '/my_handler',
    type: 'GET',
    data: JSON.stringify(request),
    contentType: 'application/json',
    success: successFunc,
    error: errorFunc  
});

然后我在myHandler中获取数据:

class MyHandler(webapp2.RequestHandler):
    def get(self):
        logging.info(self.request)

现在我希望根据该数据呈现不同的页面。 但是,如果我尝试在self.response.write("something")内拨打MyHandler,它(逻辑上)不会在网页中呈现它,但会在successFunc(response)中将其返回。

如何控制回python以呈现我的模板?

控制我的网页从Python和Javascript看起来的样子感觉有点奇怪 我的方法完全错了吗?

3 个答案:

答案 0 :(得分:1)

如果您希望Python呈现新页面,为什么要使用ajax。如果您在没有ajax的情况下发布数据,则不必处理ajax响应并收到新页面。

但是如果你想使用ajax发送数据,你可以在浏览器中处理ajax响应后获得新的呈现页面。一种重定向。 <url_to_get>可以成为ajax响应的一部分:

使用以下方式更新您的succesFunc:

top.location.href="<url_to_get>";

window.location.href = "<url_to_get>";

如果您想更新页面的状态,Ajax是有意义的。

答案 1 :(得分:1)

通常有两种方法来控制页面的呈现方式:

  1. 旧的,传统的服务器端方式是将URL与每个视图相关联,让服务器在将HTML发送到浏览器之前计算HTML。这就是Python可以提供帮助的地方。在这种情况下,对HTML的任何更改都需要更改或刷新页面。

  2. 客户端方式,即使用静态HTML和JS文件,然后向服务器发送AJAX请求以获取信息或执行无法在客户端上执行的计算。在这种情况下,Python代码仅提供AJAX请求的答案(通常以JSON格式),然后Javascript决定如何处理该答案,例如添加按钮,删除图像等。

  3. 当然,这两种方法可以同时使用,例如使用Python代码预渲染页面,然后使用一些javascript + AJAX来使页面更具动态性。

    在你的情况下,你有两个选择:

    • 在Python中保留服务器上的逻辑。这意味着您必须放弃AJAX,而是将用户重定向到Python将能够生成正确HTML代码的新页面。您可以使用以下代码在javascript中执行此操作:

      window.location.href = "/mypage?myparams=myvalues";

    • 保留AJAX,因为您希望用户留在当前页面中。在这种情况下,请查看jQuery框架(如jQuery)如何帮助您操作页面以更新您想要的内容。作为中间步骤,您可以在Python中生成一些部分html(如<div>),在AJAX响应中返回它,并让jQuery在页面中插入它。 Here is a documentation on how you can use jQuery to update the page

答案 2 :(得分:0)

要从应用程序可靠地获取JSON有效负载,您需要设置内容类型。尝试添加

self.response.headers['Content-Type'] = 'application/json'

在执行write

之前