2012-10-14 5 views
2
meclass.prototype.switch = function() { 
var items = []; 
$.getJSON('http://localhost/jsoner.php', function(data) { 
    $.each(data, function(key, val) { 
     items.push(val); 
     alert(items[0]); //this works 

    }); 
}); 
alert(items[0]); //this does not 
} 

나는 이것을 잠시 동안 만지작 거리며 실제로 얻지 못했습니다. 나는 모든 jquery 함수에서이 문제를 겪고있다. 그래서 나는 방금 배운 것이 없어서 대답을 찾지 못했다.함수 내에서 jquery 변수 범위

+2

항목 배열이 당신이 그것을 액세스하려고 할 때 비어 있습니다. 서버에서 JSON 객체를받을 때만 채워집니다. 따라서 콜백에서 모든 것이 잘 작동합니다. – skovalyov

답변

7

방법은 비동기 인 입니다. 다음 진술을 즉시 실행하면 실행이 계속됩니다. 콜백 함수는 서버가 요청에 응답 할 때마다 나중에 실행됩니다.

따라서 비동기 요청의 결과에 의존하는 코드는 콜백 함수 내에서 이동해야합니다.

이 무슨 효율적입니다 :

var items = []; //Declare `items`, empty array 
//Make AJAX request 
alert(items[0]); //It's still an empty array 
//Wait some arbitrary amount of time... 

//AJAX request complete, run the callback function 
alert(items[0]); //Inside callback, items now contains elements