2011-01-06 6 views
6

아래 코드는 문제가 있습니다. 기본적으로 전역 변수 (var playlist = [])로 빈 배열을 정의한 다음 jQuery $ .get 호출 내에서 요소를 추가하려고합니다. 내가 인터넷에서 읽은 것으로부터, 나는 이것을 할 수 있어야한다! 다음 코드는 "undefined의 play '메서드를 호출 할 수 없습니다."라는 오류를 표시합니다. playlist [0]은 함수 내에서 설정됩니다. $ .get 호출 내 playlist [0] 호출은 예상 결과를 제공하지만 함수 밖에서는 지속되지 않습니다.jQuery에서 전역 변수에 액세스 할 수 없습니다. 함수 내에서 .get.

var playlist = []; 
function playArtist(artist){ 
    $.get('media/songs/' + artist, 
    function(data){ 
     for (var i in data){ 
     playlist[i] = setSong(data[i].Resource.name,'track' + data[i].Media.id,i + 1); 
     } 
    $('#track-total').text(parseInt(playlist.length)); 
    },'json' 
); 
    playlist[0].play(); 
} 

아무도 도와 줄 수 있습니까?

감사합니다.

답변

2

$.get이 반환되기 전에 playlist이 사용 중입니다. - 아약스 호출은 비동기식입니다. 내에서 성공 콜백이 작동하면 요청이 완료되면 해지되기 때문에 예상 한 데이터가 포함됩니다.

+0

그래, $ .get 함수 내에서 playlist [0] .play()를 움직이면 트릭을 만들었다. 고마워요! – Will

1

.get은 비동기식이므로 콜백 기능을 제공해야합니다. get이 진행되는 동안 배열을 사용하려고 시도하고 있습니다. 배열이 실제로 채워지기 전에 배열을 사용하려고합니다.

6

이 작업을 수행 할 필요가 없습니다. 나는 내 프로젝트에서 같은 문제에 부딪쳤다. 당신이하는 일은 글로벌 변수를 재설정하기 위해 성공 콜백 내에서 함수 호출을 만드는 것입니다. 오랫동안 비동기 자바 스크립트를 false로 설정하면 제대로 작동합니다. 여기 내 코드가있다. 희망이 도움이됩니다.

var exists; 

//function to call inside ajax callback 
function set_exists(x){ 
    exists = x; 
} 

    $.ajax({ 
    url: "check_entity_name.php", 
    type: "POST", 
    async: false, // set to false so order of operations is correct 
    data: {entity_name : entity}, 
    success: function(data){ 
    if(data == true){ 
     set_exists(true); 
    } 
    else{ 
     set_exists(false); 
    } 
    } 
}); 

if(exists == true){ 
    return true; 
} 
else{ 
    return false; 
} 

희망이 도움이 될 것입니다.

관련 문제