根据Javascript数据呈现页面的正确方法
我正在使用谷歌应用程序引擎创建一个测试应用程序 我有一个处理程序来呈现初始网页,其中包括一个按钮。当我单击按钮时,我想发回一些信息,因此我使用如下请求:根据Javascript数据呈现页面的正确方法,javascript,python,google-app-engine,jinja2,Javascript,Python,Google App Engine,Jinja2,我正在使用谷歌应用程序引擎创建一个测试应用程序 我有一个处理程序来呈现初始网页,其中包括一个按钮。当我单击按钮时,我想发回一些信息,因此我使用如下请求: var request = { "myData": { "key1": value, "key2": value } }; $.ajax({ url: '/my_handler', type: 'GET', data: JSON.stringify(request),
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(“某物”)
insideMyHandler
它(逻辑上)不会在网页中呈现,而是在successFunc(response)
中返回它
如何将控制权交还给python来呈现模板
从Python和Javascript控制我的网页的外观感觉有点奇怪。我的方法完全错了吗?要可靠地从应用程序到浏览器获取JSON负载,需要设置内容类型。尝试添加
self.response.headers['Content-Type'] = 'application/json'
在执行
编写之前
如果希望Python呈现新页面,为什么要使用ajax呢。如果在没有ajax的情况下发布数据,则不必处理ajax响应,即可收到新页面
但是,如果希望使用ajax发送数据,可以在浏览器中处理ajax响应后获得新的呈现页面。一种重定向。
可以是ajax响应的一部分:
使用以下命令更新您的成功函数:
top.location.href="<url_to_get>";
top.location.href=”“;
或
window.location.href=”“;
如果要更新页面的状态,Ajax是有意义的。通常有两种方法来控制页面的呈现方式:
- 用Python将逻辑保存在服务器上。这意味着您必须放弃AJAX,而是将用户重定向到一个新页面,Python将能够为该页面生成正确的HTML代码。您可以使用以下代码在javascript中执行此操作:
window.location.href=“/mypage?myparams=myvalues”代码>
- 保留AJAX,因为您希望用户留在当前页面中。在这种情况下,请查看诸如jQuery之类的javascript框架如何帮助您操纵页面以更新任何您想要的内容。作为中间步骤,您可以在Python中生成部分html(如
),在AJAX响应中返回,并让jQuery将其插入页面中
template=JINJA\u ENVIRONMENT.get\u template('page\u to\u render\u based\u on\u js\u data.html')self.response.write(template.render())
。这可能吗?我根据您的问题假设您希望传递JSON数据,因此如果您将内容类型设置为application/JSON,那么是的,将一个序列化的JSON对象传递给write
。您可以从模板构造JSON数据,但这是一种不必要的困难方法。但是如果你想这样做,我建议你用.json
扩展名来命名你的模板,只是为了让你自己更容易。谢谢你,这正是我想要的。因此,一开始就用python呈现模板,然后用javascript操作模板,这不是“不受欢迎”的做法吗?在你的情况下,我认为你不需要任何javascript。一个简单的HTML表单,带有key1和key2以及按钮,可以发布数据,生成一个新页面。这里的例子:@voscausa是的,你是对的,我在这里使用了一个简化的例子。实际使用类似于通过javascript获取地理位置并将数据传回。这并不是不赞成的,但在关注点分离方面有点奇怪:对于给定区域,如果您的页面,HTML将由python和javascript代码生成,这会使开发更困难。谢谢,我也会尝试不使用ajax。我对Web开发非常陌生,我看到每个人都在使用Ajax,并且告诉你们实话,我甚至没有考虑用不同的方式来做这个请求。
window.location.href = "<url_to_get>";