XDomainRequest onLoad 在 IE8 中未正确触发



我正在向谷歌地理编码 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中调试,这似乎是这样做的

  • 从表单元素获取邮政编码
  • 跳转到带有邮政编码的功能
  • 创建新的 XDomainRequuest
  • 跳过 xdr.onload
  • 创建新的 XDomainRequest
  • 出条件并向下跳转到 is邮政编码有效并返回错误

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

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

谢谢!

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

   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'];

相关内容

  • 没有找到相关文章

最新更新