我使用Ajax $ .post()将表单内容发布到Google应用引擎中的控制器。表单主要是尝试使用html5地理位置和用户输入来查找lat / lng。
<form method="post" id="simple-form" action="/search">
<div>
<input type="text" placeholder="Keyword" name="searchQuery" id="searchQuery">
<input type="button" id="simple-submit-button">
</div> </form>
试图找到地理位置
$('#simple-submit-button').click(function () {
navigator.geolocation.getCurrentPosition(onSuccess, onError);
})
function onSuccess(position) {
document.getElementById('Latitude').value = position.coords.latitude;
document.getElementById('Longitude').value = position.coords.longitude;
var x = document.getElementById('Latitude').value;
if (x != undefined || x != null) {
submitform();
}
}
使用jquery $ .post()将内容发布到方法并呈现另一个页面。
function submitform() {
var where = $("#simple-firm").attr("action");
var fi = $("#Latitude").val();
var fj = $("#Longitude").val();
var gk = $("#searchQuery").val();
var what = {Latitude: fi, Longitude: fj, searchQuery: gk};
$.post(where, what, handleResponse, "json");
}
以下是我的router.py
from webapp2 import WSGIApplication
from webapp2 import Route
app = WSGIApplication([
Route('/search', handler='app.serp.Search'),
}
和我的方法
class Search():
def get(self):
self.redirect('/')
def post(self):
query_name = self.request.get('searchQuery')
lat = float(self.request.get('Latitude'))
lng = float(self.request.get('Longitude'))
print query_name,lat, lng
#self.response.out.write('<html><body>You wrote:<pre>')
self.render('serp/serp.html')
虽然我可以在终端中看到正在打印的query_name,lat,lng的值,但是既没有显示self.render也没有self.response。我基本上想要渲染另一个名为serp.html的页面。这里出了什么问题。如何解决它。
答案 0 :(得分:0)
需要了解更多信息。但是,这里有一些尝试:
1)检查日志以查看错误的位置。
2)此项目的/serp/
中有sys.path
吗?尝试:
self.render('serp.html')
self.render('/serp.html')
self.render('/serp/serp.html')
3)使用jinja2,也许还有Flask。这些使渲染模板变得容易。
答案 1 :(得分:0)
首先,阅读有关渲染模板的this webapp2 documentation。模板基本上只是html文件,您可以在服务页面之前将自己的变量注入到html中(或者您可以按原样提供html)。
根据该文档判断,您可能希望这样做:
import os
import webapp2
from google.appengine.ext.webapp import template
# don't forget to extend webapp2.RequestHandler
class Search(webapp2.RequestHandler):
def get(self):
self.redirect('/')
def post(self):
query_name = self.request.get('searchQuery')
lat = float(self.request.get('Latitude'))
lng = float(self.request.get('Longitude'))
print query_name,lat, lng
template_values = {
'query_name': query_name,
'lat': lat,
'lng': lng
}
path = os.path.join(os.path.dirname(__file__), 'serp/serp.html')
self.response.out.write(template.render(path, template_values))
然而,你的问题对我来说有点奇怪。您正在将一个html页面返回给AJAX帖子请求?通常,您要么:
你正在做两个混合的AJAX正在接收一个新的html页面,你仍然可以使工作得很好,但它有点奇怪。您可能会发现使用json或xml更容易回复,并使用jquery / AJAX通过设置post请求的json response来处理dataType或xml。你的电话。