1

我正在向 google geocode api 发出请求,以获取给定邮政编码的纬度和经度。这在所有浏览器栏 IE8 中都可以正常工作(震惊!)。

为了解决这个问题,我为 IE 实现了 XDomainRequest。

  /*
      Convert postcode to lat/lng.
  */

  var convertPostcodeToLatLng = function(postcode) {
    var isPostcodeValid = false,
      postcodeRegex = /[A-Z]{1,2}[0-9][0-9A-Z]?\s?[0-9][A-Z]{2}/gi,
      lat,
      lng;

    if (window.XDomainRequest) {
      // Use Microsoft XDR
      var xdr = new XDomainRequest();

      xdr.onload = function() {

        response = JSON.parse(xdr.responseText);

        if (postcode.match(postcodeRegex) && response.status === 'OK') {
          lat = response.results[0].geometry.location.lat;
          lng = response.results[0].geometry.location.lng;

          isPostcodeValid = true;
        }
      }

    } else {

      $.ajax({
        url: '//maps.googleapis.com/maps/api/geocode/json?address=' + postcode + ',+UK&sensor=false',
        type: 'get',
        dataType: 'json',
        cache: false,
        async: false,
        success: function(response) {

          window.console && console.log(response);

          if (postcode.match(postcodeRegex) && response.status === 'OK') {
            lat = response.results[0].geometry.location.lat;
            lng = response.results[0].geometry.location.lng;

            isPostcodeValid = true;
          }

        },
        error: function(response) {
          // error
        }
      });

    }

    if (!isPostcodeValid) return ['error', 'Please enter a valid postcode'];

    return [lat, lng];
  }

这就是我所说的

applicantPostcode = fm.find('input[name=postcode]').val(),
applicantPostcodeCoords = convertPostcodeToLatLng(applicantPostcode);

我还在继续之前检查错误

if (applicantPostcodeCoords[0] === 'error') {
      $('#sb-player #postcode').after('<label class="invalid-postcode">' + applicantPostcodeCoords[1] + '</label>');

  return;
}

现在我说它不起作用,那是一个谎言,它确实起作用了它只是不能立即起作用,所以当它不应该发生时,错误就会被触发。

我已经尝试在 IE8 中进行调试,这似乎就是这样做的

  • 从表单元素获取邮政编码
  • 使用邮政编码跳转到功能
  • 创建新的 XDomainRequest
  • 跳过 xdr.onload
  • 创建新的 XDomainRequest
  • 跳出条件下到 isPostcodeValid 并返回错误

现在请求确实有效,我已经对其进行了测试,问题是它不能立即工作,因此会跳入错误。

任何人都知道为什么它会跳过负载而不是进入负载?

谢谢!

4

1 回答 1

0

一旦你的函数加载它就会进入第一个条件并且失败了

   if (postcode.match(postcodeRegex) && response.status === 'OK') {
        lat = response.results[0].geometry.location.lat;
        lng = response.results[0].geometry.location.lng;

        isPostcodeValid = true;
      }

因为您此时还没有发送请求,所以还没有回复?

因此,当您在第一次运行该函数时点击它时 if (!isPostcodeValid) return ['error', 'Please enter a valid postcode'];

于 2014-11-13T13:28:50.900 回答