2013-05-22 3 views
1

Google지도 API로 작업하고 있습니다. 나는 개체의 내부 값은 위도와 경도 삽입해야하지만, 내가 좋아하는 뭔가를 할 수 없습니다jquery 함수 내부의 함수 내부에서 변수를 전달하는 방법은 무엇입니까?

$.get(url).done(buscaGPS(data, i)); 

function buscaGPS(data, i) { 

} 

코드를 당신이 당신이 좋아하는 무언가를 할 뜻처럼 소리

objecto = [{ 
    "address_1": "Avenida da Republica, 15A", 
    "city": "Lisbon", 
    "country": "pt", 
    "id": 1534282, 
    "name": "Pastelaria Versailles" 
}, { 
    "address_1": "Avenida da Republica, 15A", 
    "city": "Lisbon", 
    "country": "pt", 
    "id": 1534282, 
    "name": "Pastelaria Versailles" 
}]; 


for (var i = 0; i < objecto.length; i++) { 
    var url = "http://maps.googleapis.com/maps/api/geocode/json?address=" + objecto[i].address_1 + "+" + objecto[i].city + "+" + objecto[i].country + "&sensor=false"; 
    $.get(url).done(buscaGPS); 
}; 



function buscaGPS(data) { 

    objecto[i].lat = data.results[0].geometry.location.lat; 
    objecto[i].lon = data.results[0].geometry.location.lng; 

} 
+2

문제가 무엇인지 명확하게 설명해 주시겠습니까? 코드에 동일한 이름을 가진 두 개의 함수가있는 것 같습니다. 의도적인지 또는 단지 복사 오류인지 확실하지 않습니다. –

+1

buscaGPS 함수가 두 번 선언되었습니다. 첫 번째 선언을 제거하고 코드를 다시 실행하여 충돌이 있는지 확인합니다. – bottens

+0

아, 알겠습니다. 응답 데이터를 올바른 위치에 놓을 수 있도록 색인을 응답과 일치시켜야합니까? – Shanimal

답변

1

...

+0

'$ .get (url) .done (buscaGPS); $ .get (url) .done (function (results) { buscaGPS (results, i); }); function buscaGPS (data, z) { console.log (z); objecto [z] .lat = data.results [0] .geometry.location.lat; } 콘솔 : 성공 catch되지 않은 형식 오류가 : 실수로 만들어진 정의되지 않은 0' 의 특성 '위도'설정 나는이 편집을 할 때 나는 그것을 보았다 수 없습니다. – henriqesilva

+0

data.results [0] .geometry.location이 정의되지 않았습니다 ... 결과 세트는 어떻게 생겼습니까? 당신은 "데이터"를 붙여 넣을 수 있습니까? – Shanimal

+1

여기에 실수를했습니다. $ .get (url) .done (buscaGPS); 나는 그것을 잊어 버리는 것을 잊는다. 당신의 도움을 주셔서 감사합니다. 지금 일하고있다. 그것은 수치스럽게 간단합니다 :). 응답은 원래 작성한 것이 었습니다. '$ .get (url) .done (function (results) { buscaGPS (results, i); }); ' – henriqesilva

0

Shanimal의 솔루션은 완벽하게 타당하지만, function-returning-a-function을 사용하여 코드에 약간의 복잡성이 추가됩니다. 당신은 실제로 그것을 닫을 필요가 없습니다. 간단한 함수 호출이 트릭을 할 것입니다. 이것은 또한 그들을 대체하는 간단한 place 변수를 사용하여 모든 objecto[i]objecto[index] 참조를 없애는 것을

for(var i = 0; i < objecto.length; i++) { 
    geocode(objecto[i]); 
} 

function geocode(place) { 
    var url = 
     "http://maps.googleapis.com/maps/api/geocode/json?address=" + 
     place.address_1 + "+" + place.city + "+" + place.country + 
     "&sensor=false"; 
    $.get(url).done(function(data) { 
     var location = data.results[0].geometry.location; 
     place.lat = location.lat; 
     place.lon = location.lng; 
    }); 
} 

참고 :

이 대안을 고려하십시오.

이 접근 방식은 함수를 반환하는 함수보다 훨씬 이해하기 쉽습니다.

지리 정보 관련 기타 의견 : objecto 배열의 위치 수가 더 많습니까? 그 이상인 경우 지오 코딩 요청을 모두 연속적으로 실행하는 대신 속도를 늦춰야합니다.

고정 위치 인 경우 한 번 위치 정보를 지정하고 배열에 lat/long을 저장해야하므로 브라우저에서 위치 정보를 전혀 지정할 필요가 없습니다. 이렇게하면지도가 더 빨리로드되고 여러 주소로 지오 코딩하는 문제를 피할 수 있습니다.

+0

Humm 나는이 방법을 결코 생각하지 않았다. 가끔 자바 스크립트 객체를 이해하는데 어려움이 있습니다. 그렇습니다. 무슨 일이 일어나고 있는지 이해하려고 할 때 Shanimal이 반환을 사용하여 데이터에 액세스 할 수있는 이유를 알 수 없습니다 ('return function (data)'). 나는 아직도 배울 것이 많다. – henriqesilva

+0

예, Google api의 병목 현상을 이미 보았습니다. "브라우저에서 지오 코딩하지 않아도됩니다." 나는 당신이하는 말을 잘 듣지 못한다. 서버에서 지오 코딩해야한다고 말하고 있습니까? – henriqesilva

+0

예, 고정 된 위치 집합을 다루는 경우에는 한 번 지오 코딩 한 후 끝내는 것이 좋습니다. 위치가 데이터베이스에있는 경우 위도/경도에 대한 열 (또는 두 개의 열)을 추가하고 서버에서 지오 코딩 프로세스를 실행하여 해당 열을 채울 수 있습니다. 완료되면 다시는 지오 코딩하지 않아도됩니다. 미리 위치를 모르는 경우 브라우저에서 해당 위치를 지오 코딩 할 수 있지만 길게는 길어집니다. –

관련 문제