我的一个表单字段是地址。在将其发送到服务器之前,我想将其转换为经度和纬度。这需要向某些外部服务(例如Google Maps API)发送异步请求。这样做的正确方法是什么?
我的地理编码片段:
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
字段中提交表单。onchange
字段使用address
事件处理程序 - 这需要阻止提交按钮,直到我们对地址进行地理编码;如果我们在提交表格值之后预先填充表格值(例如过滤行)显然我也可以在服务器端解析它,但这可能会导致一个用户在外部服务中使用我所有的“配额”,我必须实现某种公平性,我想避免
那么在javascript中解决这种表单值预处理的正确方法是什么?
答案 0 :(得分:0)
您可以考虑以下方法:
Event.preventDefault()
var RAND_MAX = XXX;
var p = X;
var q = X;
function getPLByStackOverflow(){
function getRandomArbitrary(min, max) {
return Math.random() * (max - min) + min;
}
var a = [];
var b = [];
var c = [];
for (var i = 0; i < 100; ++i) {
a.push(getRandomArbitrary(0, RAND_MAX));
b.push(getRandomArbitrary(0, RAND_MAX));
if(((a[i] * p) + q) > b[i])
{
c.push(1);
}
else {
c.push(0);
}
}
return (0);
}
功能form.submit()
示例强>
google.maps.Geocoder.geocoder