2014-02-17 5 views
-1

저는 함수, 변수 및 범위로 여전히 어려움을 겪고 있습니다.jQuery 함수, 변수 및 범위

개념을 설명하는 여러 기사를 읽은 것 외에 여러 가지 관련 게시물이 있지만이 내용을 파악할 수는 없습니다. 사람이 어떻게 기능 여기

외부 바르 IP/잠/국가에 액세스하는 코드를 작동하고 말해 줄 수 ( 내부의 FN을 액세스 바르) :

$.get("http://ipinfo.io", function (response) { 
    var ip, prov, country; 
    ip = response.ip; 
    prov = response.region; 
    country = response.country; 
    alert('IP: '+ip+ ' ** Prov: ' +prov+ ' ** Country: ' +country); 
}, "jsonp"); 

그러나, 나는 바르에 액세스하려면 함수 밖에서 나중에 사용할 수 있습니다.

이 내 사이트에 작동하지 않았다 (모든 항목은 "정의"로 표시) :

var ip, prov, country; 
$.get("http://ipinfo.io", function (response) { 
    ip = response.ip; 
    prov = response.region; 
    country = response.country; 
}, "jsonp"); 
alert('IP: '+ip+ ' ** Prov: ' +prov+ ' ** Country: ' +country); 

그러나 this jsFiddle에서 잘했다!

또한,이 (모든 정의되지 않은) 작동하지 않았다 : 나는 IP/잠/국가에 액세스 할 수 내 사이트에 무엇을해야

var ip, prov, country; 
$(function(){ 
    $.get("http://ipinfo.io", function (response) { 
     ip = response.ip; 
     prov = response.region; 
     country = response.country; 
    }, "jsonp"); 
    alert('IP: '+ip+ ' ** Prov: ' +prov+ ' ** Country: ' +country); 
}); //END document.ready 

은 $ 갔지 함수 외부 바르

?

감사

+0

이것이 가장 중복 된 질문입니다. 다음과 같이하십시오. 약간의 노력을 기울여야합니다. 검색 필드를 사용하십시오. –

+0

중복되는 경우 왜 도움이되지 않습니까? 나는 이것을 몇 시간 동안 고민해왔다. 허락하신다면, 나는 서랍에서 가장 날카로운 칼이 아니지만 다른 많은 문제를 알아 냈습니다. 도움의 손길에 대한 나의 정직한 필요성은 제가 질문 한 이유입니다. – crashwap

+0

아약스가 완료 될 때까지 버튼을 클릭하지 않기 때문에 바이올린에서만 작동합니다 ... – dandavis

답변

5

AJAX는 비동기입니다. alert내에서 콜백 기능을 사용해야합니다. 이것은 가변 스코프의 문제가 아니며, AJAX 호출이 완료되지 않았기 때문에 변수가 alert이 실행될 때 단순히 설정되지 않습니다.

+0

답변 주셔서 감사합니다. 그러나 이것은 제가 가지고있는 문제가 아닙니다. 내 소스에는 아직 AJAX 코드가 없습니다. (길 아래로, AJAX를 통해 서버에 저장소를 보내려합니다.) 지금은 AJAX 코드를' $ .get' 함수. – crashwap

+2

내가 듣고있는 것 : "지금은 불가능한 것을하고 싶습니다." $ .get은 ajax이므로, 당신이 알고 있든 그렇지 않든 아약스를 사용하고 있습니다. 콜백 외부에서 도달하도록 전역에 정보를 푸시 할 수 있지만 범위는 여기서 주요 문제는 아니며 타이밍이 중요합니다. 그리고 그 글로벌이 사용 가능할 때까지 기다리는 외부 코드를 가지고 있다면, 더 이상 정의되지 않은 것이있을 때까지 폴링 대신 콜백에서 처리하지 않는 것이 어떻습니까? – dandavis

+0

예, * * 문제가 있습니다. 당신의 코드는 * AJAX뿐입니다. 그것이'$ .get '입니다. – meagar