2011-09-13 9 views
2

안녕하세요 저는 티타늄 스튜디오를 사용하여 Android 애플리케이션 개발을하고 있습니다. 작은 애플리케이션을 개발했습니다. 문제는 xhr.on로드 내부에서 정의되는 변수에 액세스 할 수 없다는 것입니다. 다음 코드를 사용했습니다.로드 함수에서 외부 변수에 액세스하기

xhr.onload = function() 
{ 
var json = this.responseText; 
var to_array = JSON.parse(json); 
var to_count = to_array.length; 
}; 

내가 다음 코드 사용되는 window.For을 to_count에 액세스하고 외부 온로드 기능을 to_array 다른 아이에게 전달하려는 :

var feedWin = Titanium.UI.createWindow({ 
    url:'home/feed.js' 
});//alert(to_count); 
feedwin.to_array = to_array; 
feedwin.to_count = to_count; 

답변

0

이 작업을 수행하는 가장 좋은 방법은 feedWinonload으로 초기화하는 것입니다.

xhr.onload = function() 
{ 
    var json = this.responseText, 
     feedWin = Titanium.UI.createWindow({ 
      url:'home/feed.js' 
     });//alert(to_count); 

    feedWin.to_array = JSON.parse(json); 
    feedWinto_count = to_array.length; 
}; 

또는

var feedWin = Titanium.UI.createWindow({ 
     url:'home/feed.js' 
    }); 

xhr.onload = function() 
{ 
    var json = this.responseText, 

    feedWin.to_array = JSON.parse(json); 
    feedWinto_count = to_array.length; 
}; 

나는 티타늄에 익숙하지 않은, 그래서 나는 사항을 모르지만, 그건 내 추측이다 : 그래서, 다음의 두 조각 중 하나가 작동합니다.

-1

나는 티타늄 잘 알고 아니지만, WRT에 선언의 범위, 이것이 당신이 생각하는 것입니다. 기능 밖에서 그들을 사용하기 위해 할일.

var to_array; 
var to_count; 


xhr.onload = function() 
{ 
var json = this.responseText; 
to_array = JSON.parse(json); 
to_count = to_array.length; 
}; 
+0

빠른 재생을 해줘서 고맙습니다.하지만 "정의되지 않은"오류가 발생합니다. – nilkash

+1

이 경우 feedwin.to_array = to_array; feedwin.to_count = to_count; 당신의 onload가 호출 된 후에 발생합니다. Javascript는 C와 같은 참조 기반이 아니므로로드 할 때 앞서 호출 한 경우 null/정의되지 않은 값이 반환됩니다. –

1

XHR 클라이언트는 기본적으로 비동기식입니다. 즉, XHR이 실행되는 동안 코드가 계속 실행됩니다. XHR에 종속 된 코드가있는 경우 onload 함수에서 해당 코드를 호출하거나 XHR을 xhr.send()에 세 번째 매개 변수로 "false"를 추가하여 강제로 동기화해야합니다. 첫 번째 옵션이 더 안정적인 것으로 밝혀졌으며 티타늄이 기대하거나 느끼는 것이 모범 사례 (단지 FYI)와 일치합니다.

관련 문제