2012-04-09 2 views
2

코드 예제 :전역 배열을 정의하는 방법?

<script> 
     var data = new Array(); 
     data[0] = 'hi'; 
     data[1] = 'bye'; 
</script> 

<script> 
     alert(data[0]); 
</script> 

이 다음과 같은 오류 제공 : data is not defined

을 어떻게이 일 같은 것을 어떻게해야합니까? 특히 첫 번째 <script> 블록이 ajax에 의해 페이지에로드되고 두 번째 블록이 Ajax에서 작동하는 경우 특히 그렇습니다. jQuery 솔루션을 사용할 수 있습니다.

+0

예제는 테스트에서 잘 작동합니다. 원래의 질문은 작동하지 않는 "new"대신 "New"를 가졌습니다. – dtech

+0

@dtech 그는 첫 번째 스크립트를 비동기 적으로로드합니다. 그게 그의 문제 야, 내 대답을 참조하십시오 – xandercoded

+0

@ Zee 티, 당신은 [피들] (http://jsfiddle.net)을 함께 넣어해야합니다. – Alexander

답변

6

New는 (는) 키워드가 아닙니다.

사용 : 더 간결

var data = new Array(); 

또는 : 당신이 편집있어

var data = []; 

후에는 첫 번째 스크립트 블록이 비동기 적으로로드 언급. 코드가 작성된대로 작동하지 않습니다. data은 일단 페이지에로드되면 전역 변수입니다. 코드를 제대로 실행하려면 콜백 패턴을 사용해야합니다.

비동기 코드를 게시하지 않았으므로 callback 샘플을 제공하지 않습니다. 하지만 빠른 해결책은 다음과 같습니다.

var interval = setInterval(function(){ 
    if(data) { 
     /* ... use data ... */ 
     clearInterval(interval); 
    } 
}, 500); 
+0

@jlafay, 그것이 진짜 문제 이건 대답입니다. – Alexander

+0

권자 ... 왜 이것이 정확하게 대답이되어서는 안 될까요? – MilkyWayJoe

+0

나는'new'와 똑같은 에러를 보입니다. –

1

전역 변수를 만들려면 명령문에서 'var'을 생략하면됩니다. 'var'을 생략하면 실제로 변수가 창 네임 스페이스에 생성됩니다.

그래서, zz = 1 당신이 정말로 원한다면, 당신은 명시 적으로

window.data = new Array(); //remember that new should be lowercase. 

을 말할 수 있습니다하지만 당신은 '당신이 만약

data = ['hi','bye']; 
alert(data); 
+0

수정 된 코드를 참조하십시오. 첫 번째 스크립트 블록이 w/ajax로로드됩니다. –

0

을 말함으로써 어쨌든 빠른 것을 쓸 수 window.zz = 1

실제로 jQuery를 사용하여 다시 .html()을 사용하는 대신 .getScript()을 시도해야합니다.

// in separate file 

data[0] = 'hi'; 
data[1] = 'bye'; 


// in main file 

var data = []; 

$.getScript(url).done(function() { 
    alert(data[0]); 
}).fail(function() { 
    // handle error 
}); 
관련 문제