我正在使用Python / Django编写一个网站,目前我正在通过geopy模块进行服务器端地理编码。我想实现逐步增强通过Javascript进行地理编码(以确保我没有达到Google的地理编码请求/用户的每日限制),然后将Javascript地理编码的结果传递给服务器以进行进一步处理。
我目前正在做的是使用javascript和Google地理编码API来获取(lat,lon)坐标,并将它们作为隐藏输入添加到我的表单中。但是,我不知道如何使用(lat,lon)提交此表单而不会遇到无限循环。我宁愿远离发送这个通过Ajax,因为对于这个特定的页面,99.9%的页面需要刷新,我想尽可能简化设计,所以Ajax会有点过分。
我把event.preventDefault()放到if语句中测试是否存在隐藏的lat / lon变量,但是无法使它工作。
有什么想法吗?提前致谢!瓦西里
$(document).ready(function() {
var g = new GoogleGeocode();
//bind event handler
$('#address_form').bind('submit', function(event){
//get address from form
var address = $('#id_address').val();
event.preventDefault();
//get lat/lon
g.geocode(address, function(data) {
if(data != null) {
alert(data.longitude + " " + data.latitude);
//insert lat and lon into the form
$('<input type="hidden" id="lat" name="lat" value="' + data.latitude + '"/>').appendTo('form');
$('<input type="hidden" id="lon" name="lon" value="' + data.longitude + '"/>').appendTo('form');
} else {
alert('ERROR! Unable to geocode address');
}
});
});
});
答案 0 :(得分:0)
一旦确定必须提交表单,就应该unbind
表单submit
事件处理程序。试试这个
$(document).ready(function() {
var g = new GoogleGeocode();
//bind event handler
$('#address_form').bind('submit', function(event){
//get address from form
var address = $('#id_address').val();
event.preventDefault();
//get lat/lon
g.geocode(address, function(data) {
if(data != null) {
alert(data.longitude + " " + data.latitude);
//insert lat and lon into the form
$('<input type="hidden" id="lat" name="lat" value="' + data.latitude + '"/>').appendTo('form');
$('<input type="hidden" id="lon" name="lon" value="' + data.longitude + '"/>').appendTo('form');
$('#address_form').unbind('submit').submit();
} else {
alert('ERROR! Unable to geocode address');
}
});
});
});
答案 1 :(得分:0)
在submit
处理程序中,检查您是否已对其进行了地理编码,如果是,则return
。 (不是false
)
如果您在做任何事情之前返回,浏览器将正常提交。
或者,只需在地理编码后取消绑定处理程序。
答案 2 :(得分:0)
尝试在函数结束时返回false