Google은 Google지도 지오 코드 API에 대한 상호 도메인 호출을 만들고 있습니다. 이것은 현대적인 브라우저에서 모든 작업을 훌륭하게 수행하고 있었지만 IE8에서는 전혀 작동하지 않았습니다. 그것은 IE9에서도 (부분적인 CORS 지원) 실패 할 것 같습니다. 이로 인해 IE8-9를 처리 할 XDR (XDomainRequest)가 포함되었습니다. IE8에서 데이터를 다시 얻으려는 독립형 테스트에서 정상적으로 작동했습니다.* 동기 * XDomainRequest (XDR) 요청을 시뮬레이트하는 방법
XDR은 비동기 적으로 작동하므로 xdr.onload가 실행되기 전에 내 지오 코드 함수가 반환됩니다. 내가 IE8에서 위의 경고은 "위치를 확인할 수 없습니다"타격있어
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
: 내 검색 기능에서
, 나는 지오 함수를 호출합니다.여기 내 지오 기능이다 : 나는 지오 함수에서 경고 (JSON)을 주석 경우 요청이 완료 시간으로 채워을 가지고, 그래서 그 블록 조작이 때문에
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;
};
, 나는 IE8에서 내 결과를 얻을 수 내 json 개체. 주석을 해제하면 json 객체가 채워지지 않습니다.
누구나 IE에서이 작업을 수행 할 수있는 아이디어가 있습니까?
이 왜 대신 코드를 비동기 호환되도록 같은 jqXHR.done (과 jqXHR 객체의 대응 방법) 또는 사용되지 않는 jqXHR.success()의 옵션 대신 성공/오류/완료 콜백을 사용해야합니다 ? # 1은 oldie에서 작동하고 # 2는 브라우저가 위치 정보 데이터를 가져 오는 동안 깨진 것처럼 보이지 않게합니다. –
내 onload 및 success 콜백 내부에서 함수를 호출하려고했기 때문에 여기가 비어있는 부분입니다. 이 함수는 지오 코드 안에 있었고 위의 지오 코드 함수의 끝 부분에 단순히 논리가있었습니다. 지오 코드 함수는 json obj/data가없는 IE에서 여전히 반환되었으므로 검색 기능이 "위치를 확인할 수 없습니다"라는 경고를 계속 내고있었습니다. 어쩌면 주말에 fiddle/bin 작업을 게시하고 근본적으로 작업 코드를 가리키는 질문을 다시 게시 할 것입니다. –