我正在向谷歌地理编码 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'];