2014-04-07 3 views
0

나는 다음과 같이 대략 (jQuery를 사용하여) 코드 this technique를 사용하여 Google지도를로드하고있어 감지 : window.googleMapsOnLoad 성공적인 부하에 대한 내 핸들러Google지도 JS v3의 :로드 실패

  $.ajax({ 
       url: "//maps.googleapis.com/maps/api/js?client=" + GOOGLE_MAPS_CLIENT_ID + "&v=" + GOOGLE_MAPS_API_VERSION + "&sensor=false&libraries=geometry&callback=googleMapsOnLoad", 
       crossdomain: true, 
       dataType: 'script' 
      }); 

.

그리고 일반적으로 잘 작동하지만 일부 사용자에게는 내가 알 수있는 것처럼 제대로로드되지 않는 경우가 있습니다. 로드가 어떤 식 으로든 실패 할 경우 실행되는 오류 콜백을 첨부 할 수있는 방법이 있습니까?

답변

1

가끔은 일부 리소스 (프로세서, 연결 속도 등)가로드되는 데 오랜 시간이 걸릴 수 있으므로 실제로 확인할 방법이 없습니다. 이를 처리하는 방법은 유한 시간에 적절한 시간 초과를 설정하는 것입니다 (다음은 5 초를 제안 함). 편집

function checkGMapsLoad() { 
    if(!window.googleMapsOnLoad) { 
     //Error, Google Maps hasn't loaded yet. Reload page? 
     //Stuff to perform here 
    } 
} 

window.setTimeout(checkGMapsLoad, 5000); 

: 전화 걸기에 jQuery를 사용하고 있기 때문에, jQuery.ajax() 콜백이 실패 넣다 사용할 수있는 매개 변수 error 있습니다. 당신이 뭔가를 시도 할 수

  $.ajax({ 
       url: "//maps.googleapis.com/maps/api/js?client=" + GOOGLE_MAPS_CLIENT_ID + "&v=" + GOOGLE_MAPS_API_VERSION + "&sensor=false&libraries=geometry&callback=googleMapsOnLoad", 
       crossdomain: true, 
       dataType: 'script', 
       timeout: 5000,   // <------ Optional 
       error: checkGMapsLoad // <------ 
      }); 

jQuery.ajax() Documentation

+0

그래, 알 수있다. 아마도 오류 콜백과 같은 일종의 실패 콜백이있을 것으로 예상 했었습니다. 단순한 jQuery Ajax 요청을 수행하면'error' 콜백과 동등합니다 (이 경우 좋을 것입니다). – Dan

+0

사실, 적어도 초기 스크립트가 실패한 경우를 처리합니다. 나는 일단 Google이 인수하면 실패 할 수 없다는 것을 신뢰해야한다고 생각합니다. – Dan

+0

죄송합니다. jQuery를 사용하고 있다는 사실을 간과했습니다. 운 좋게 @ 단, 그들은 그것도 다뤘다. 내 대답이 업데이트되었습니다. –

1

(Demo) 다음 error 이벤트가 발생하지 않습니다 크로스 도메인 스크립트 태그를 들어

function initialize() 
{ 
    var mapOptions = { 
     zoom: 8, 
     center: new google.maps.LatLng(-34.397, 150.644) 
    }; 
    var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 
} 

, 그래서 window.setTimeout가 사용됩니다

$(function(){ 
    var timeoutId; 
    timeoutId = window.setTimeout(function() { 
     alert("Script Error!"); 
    }, 2000); 
    var url = 'https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&callback=initialize'; 
    $.getScript(url, function(){ window.clearTimeout(timeoutId) }); 
}); 
+0

나는 시간 초과가 있어야하는 것에 대해 걱정하고 있습니다. 일부 사용자는 눈에 띄게 느린 연결을하고 있습니다. – Dan

+0

그런 다음이 값을 증가 시키면 (5000) 문제가 생길 수 있습니다. 일단 스크립트가로드되면 'timeout'이 지워 지므로 가장 빠른 사용자는 그것을 볼 수 없기 때문입니다. –

관련 문제