2011-01-22 2 views
0

geoplugin에서 위치를 가져 오는 작은 스크립트가 있습니다 ... 전역으로 선언 한 변수에 반환 된 좌표를 저장하고 싶습니다. 그러나 어떤 이유로 콜백을 읽지 않습니다. 그것. 글로벌 변수를 콜백으로 사용하려면 어떻게해야합니까?jquery callback 전역 변수를 사용하지 않음

if(navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(function(position) { 
     myLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude); 
    }, function() { 
     noLocation(); 
    },{timeout: 20}); 
} 
else if (google.gears) { 
    var geo = google.gears.factory.create('beta.geolocation'); 
    geo.getCurrentPosition(function(position) { 
     myLocation = new google.maps.LatLng(position.latitude,position.longitude); 
    }, function() { 
     noLocation(); 
    }); 
} 
else { 
    noLocation(); 
} 
function noLocation() { 
$.getJSON("http://www.geoplugin.net/json.gp?id=117.201.92.17&jsoncallback=?", 
    function(data) { 
     if (data != "" && data.geoplugin_latitude != "") 
      myLocation = new google.maps.LatLng(data.geoplugin_latitude, data.geoplugin_longitude) 
     else 
      myLocation = new google.maps.LatLng() 
    }); 

} 내가 때문에 비동기 호출의의를 생각하는 몇 가지 이유 ... 내가 몇 가지 방법 문제를 극복 할 수 들어

?

+0

얘기하고 무엇을 당신이 "그것을 읽지 않습니다"에 의해 의미합니까 어떤 변수? – casablanca

답변

2

글로벌 변수 "myLocation"에 저장하는 것 같습니다. 그러나 실제로 값이 설정되기 전에 값을 읽으려고 시도하는 것일 수 있습니다. 비동기 호출이 작동하는 방식은 요청이 응답을 받으면 즉시 반환하고 나중에 언젠가는 콜백 함수를 호출하는 것입니다. 나머지 코드는 계속 실행됩니다.

그것이 채워되고 있는지 myLocation에 할당 후 "경고"를보십시오 :

myLocation = new google.maps.LatLng(data.geoplugin_latitude, data.geoplugin_longitude) 
alert(myLocation) 
+0

그것이 채워지지만,지도는 nethng을 보여주지 않습니다. coz 나는 setCenter가 이미 실행 되었기 때문에지도 API가 무엇을 보여줄지 모른다고 믿습니다. – Amit

+0

Amit - 더 많은 Google Maps API처럼 들립니다. 질문 "전역 변수를 사용하지 않는 jquery 콜백." 콜백은 실제로 전역 변수를 사용합니다. – Zach

관련 문제