【问题标题】:Using zippopotam.us to auto-populate zip-code if user enters city and state如果用户输入城市和州,则使用 zippopotam.us 自动填充邮政编码
【发布时间】:2016-04-13 20:15:34
【问题描述】:

我知道您可以使用 zippopotam API 自动填充给定邮政编码的城市和州,但我正在尝试找到一种方法来使用 API 自动填充城市和州的邮政编码给出。

如果您查看下面的 ajax 调用,您可以看到我正在使用邮政编码值发出请求,但如果您传入除邮政编码以外的参数,它会返回一个空的 JSON 块。

我只是好奇,有没有人以这种方式使用或操作 zippopotam 响应的经验?

如果没有,我可能还没有找到其他可能的简单解决方案吗?

  <script>
    $(function() {

      // OnKeyDown Function
      $("#zip").keyup(function() {
        var zip_in = $(this);
        var zip_box = $('#zipbox');

      if ((zip_in.val().length == 5) )
        {
          // Make HTTP Request
          $.ajax({
            url: "http://api.zippopotam.us/us/" + zip_in.val(),
            cache: false,
            dataType: "json",
            type: "GET",
            success: function(result, success) {
              // Make the city and state boxes visible
              // US Zip Code Records Officially Map to only 1 Primary Location
              places = result['places'][0];
              $("#city").val(places['place name']);
              $("#state").val(places['state']);
              zip_box.addClass('success').removeClass('error');
            },
            error: function(result, success) {
              zip_box.removeClass('success').addClass('error');
            }
          });
        }
  });
    });

  </script>

<fieldset>
        <legend>US Address Autocompletion</legend>
        <br/>
        <div>
          <div id="zipbox" class="control-group">
            <label for="zip">Zip</label>
            <input type="text" class='' pattern="[0-9]*" name="zip" id="zip" placeholder="Type your ZIP code"/>
          </div>
        </div>
        <div>
          <div id="citybox" class="control-group" >
            <label for="city">City</label>
            <input type="text" name="city" id="city" placeholder="" />
          </div>
          <div id="statebox" class="control-group">
            <label for="state">State</label>
            <input type="text" name="state" id="state" placeholder="" />
          </div>
        </div>
      </fieldset>

【问题讨论】:

    标签: javascript ajax api


    【解决方案1】:

    大多数城市都有多个邮政编码,因此您需要比城市/州更具体才能自动填充单个邮政编码。

    但是,zippopotam.us does provide an API for getting ZIP codes based on city/state

    网址的格式为http://api.zippopotam.us/country/state/city

    这是一个如何使用它的示例。尝试输入例如城市=“皮奥里亚”和州=“IL”

    function getZips() {
      var city = document.getElementById("city").value;
      var state = document.getElementById("state").value;
      var client = new XMLHttpRequest();
      client.open("GET", "http://api.zippopotam.us/us/" + state + "/" + city, true);
      client.onreadystatechange = function() {
        if (client.readyState == 4) {
          document.getElementById("result").innerHTML = 
            JSON.stringify(JSON.parse(client.responseText), null, 4);
        };
      };
      client.send();
      return false;
    }
    <form>
      City:<br>
      <input type="text" id="city"><br>
      State (postal abbr.):<br>
      <input type="text" id="state"><br>
    </form>
    <br>
    <button onclick="getZips()">Submit</button>
    <hr>
    <h3>Results:</h3>
    <pre id="result"></pre>

    【讨论】:

    • 这真的很棒,谢谢。在与我正在合作的团队交谈后,他们希望使用带有城市 + 州的街道地址来提供邮政编码。你对此有什么建议吗?查看 zippopotam api,看起来街道地址不是 api 的一部分?
    • 您可以使用this question 中详述的Google Maps API。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    相关资源
    最近更新 更多