我们正在对谷歌地图地理编码 API 进行跨域调用。这在现代浏览器中过去和现在都很好,而且在现代浏览器中运行良好,但在 IE8 中根本不起作用。看起来它在 IE9 中也会失败(部分 CORS 支持)。这导致包含一个 XDomainRequest (XDR) 来处理 IE8-9。在我的独立测试中这样做可以很好地在 IE8 中获取数据。
我现在遇到的问题是 XDR 只能异步工作,所以我的地理编码函数在我的 xdr.onload 触发之前返回。
在我的搜索功能中,我调用了地理编码功能:
var location = Geocode(city, state);
if (!location) {
alert('Unable to determine the location of the city and state you entered');
StopLoading();
return;
}
//function then uses location.lat and location.lng coordinates
我在 IE8 中点击了上面的“无法确定位置”警报。
这是我的地理编码功能:
Geocode = function (address, state) {
var protocol = location.protocol,
url = '//maps.googleapis.com/maps/api/geocode/json?sensor=false&address=',
param = encodeURIComponent(address + ', ' + state),
json = {};
if ('XDomainRequest' in window && window.XDomainRequest !== null) {
//IEs that do not support cross domain xhr requests
var xdr = new XDomainRequest();
xdr.open('get', protocol + url + param);
xdr.onload = function() {
json = jQuery.parseJSON(xdr.responseText);
};
xdr.send();
} else {
//good browsers
jQuery.ajax({
url: protocol + url + param,
type: 'get',
dataType: 'json',
async: false,
success: function(data) {
json = data;
}
});
}
//alert(json);
if (json.status !== 'OK') {
alert('Unable to determine the location of the city and state you entered');
return null;
}
return json.results[0].geometry.location;
};
如果我在地理编码函数中注释掉 alert(json),我会在 IE8 中获得结果,因为这是一个阻塞操作,因此请求有时间完成并填充我的 json 对象。当它未注释运行时,不会填充 json 对象。
任何人都知道如何在 IE 中使用它?