我正在使用谷歌应用引擎来创建测试应用。
我有一个呈现初始网页的处理程序,其中包含一个按钮。当我点击按钮时,我想要发回一些信息,所以我使用如下的请求:
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看起来的样子感觉有点奇怪 我的方法完全错了吗?
答案 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)
通常有两种方法来控制页面的呈现方式:
旧的,传统的服务器端方式是将URL与每个视图相关联,让服务器在将HTML发送到浏览器之前计算HTML。这就是Python可以提供帮助的地方。在这种情况下,对HTML的任何更改都需要更改或刷新页面。
客户端方式,即使用静态HTML和JS文件,然后向服务器发送AJAX请求以获取信息或执行无法在客户端上执行的计算。在这种情况下,Python代码仅提供AJAX请求的答案(通常以JSON格式),然后Javascript决定如何处理该答案,例如添加按钮,删除图像等。
当然,这两种方法可以同时使用,例如使用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
。