在javascript中异步预处理表单数据

时间:2015-11-18 19:33:52

标签: javascript google-maps geocoding google-geocoding-api

我的一个表单字段是地址。在将其发送到服务器之前,我想将其转换为经度和纬度。这需要向某些外部服务(例如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);
    }
  });
}

我看到了几个选项:

  1. 使用onsubmit事件处理程序 - 首先返回false(等待地理编码完成),然后在单独的回调集latitude字段中提交表单。
  2. onchange字段使用address事件处理程序 - 这需要阻止提交按钮,直到我们对地址进行地理编码;如果我们在提交表格值之后预先填充表格值(例如过滤行)
  3. ,那也很棘手

    显然我也可以在服务器端解析它,但这可能会导致一个用户在外部服务中使用我所有的“配额”,我必须实现某种公平性,我想避免

    那么在javascript中解决这种表单值预处理的正确方法是什么?

1 个答案:

答案 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

Plunker