【发布时间】:2015-11-18 19:33:52
【问题描述】:
我的表单字段之一是地址。在将其发送到服务器之前,我想将其转换为纬度和经度。这需要向某些外部服务(例如 Google Maps API)发送异步请求。这样做的正确方法是什么?
我的地理编码 sn-p:
function geocodeAddress() {
var address = document.getElementById("address").value;
geocoder.geocode({"address": address}, function(results, status) {
if (status === google.maps.GeocoderStatus.OK) {
var lat = results[0].geometry.location.lat()
document.getElementById("latitude").value = lat
} else {
alert("Geocode was not successful for the following reason: " + status);
}
});
}
我看到了几个选项:
- 使用
onsubmit事件处理程序 - 首先返回 false(等待地理编码完成),然后在单独的回调集latitude字段中并提交表单。 - 对
address字段使用onchange事件处理程序 - 这需要阻止提交按钮,直到我们对地址进行地理编码;如果我们在提交后预填充表单值也很棘手(例如过滤行)
显然我也可以在服务器端解析它,但这可能会导致一个用户在外部服务中使用我所有的“配额”,我必须实现某种公平,我想避免这种情况.
那么在javascript中解决这种表单值预处理的正确方法是什么?
【问题讨论】:
-
在提交时执行 - 使用地理编码响应中的回调,然后手动提交表单 (IMO)。
标签: javascript google-maps geocoding google-geocoding-api