2013-07-25 4 views
0

변수로 xhr.responseText를 만든 다음 경고하지만 이상한 이유로 그렇게 할 수 없습니다.자바 스크립트에서 전역 변수로 임시 변수 선언 responseText

test2 = "" 
function process(){ 
    url = "http://www.example.com/example.html" 
    var xhr = new XMLHttpRequest(); 
    xhr.open("GET", url, true); 
    xhr.onreadystatechange = function() { 
    if (xhr.readyState == 4){ 
     test2 = xhr.responseText 
     } 
    } 
    xhr.send(); 
} 
process(); 
alert(test2); 

이 문제에 도움을 주신 모든 분들께 감사드립니다. 당신이 TEST2 변수 전에 경고하고

+0

'경고 (TEST2) ', 후자는 비동기로, 핸들러에서 작업을하거나 동기 요청을 사용 onreadystatechange''전에 실행할 수 있습니다 .. –

+0

이봐 알렉스 K.는 할 수 있습니다 내가 전역 변수로 xhr.responseText를 설정하는 방법에 대한 예를 들어 보겠다. 매우 감사. 감사. – Tom

답변

0

var test2 = ""; 

function process(callback){ 
    url = "http://www.example.com/example.html" 
    var xhr = new XMLHttpRequest(); 
    xhr.open("GET", url, true); 
    xhr.onreadystatechange = function() 
    { 
     if (xhr.readyState == 4) 
     {   
      test2 = xhr.responseText; 
      callback(); 
     } 
    } 
    xhr.send(); 
} 

process(callbackFunction); 

function callbackFunction() 
{ 
    alert(test2); 
} 
+0

스크립트의 뒷부분에서 사용해야하기 때문에 전역 변수로 저장해야합니다. – Tom

+0

그 코드가 정확히 무엇을하는지 ... 비동기 적이기 때문에 xhr.onreadystatechange가 호출 될 때까지는 내용에 액세스 할 수 없습니다. – Art

1

당신은 asynchronus 요청을 발사된다 (때문에 완료하는 데 약간의 시간이 더 필요는 XMLHttpRequest의) 내용으로 가득합니다. alert은 프로세스 기능이 실행 된 직후에 해고됩니다. 나중에 응답이 돌아 오면 onreadystatechange이 해고됩니다. AJAX 쿼리의 결과로 무엇이든 할 계획이라면 onreadystatechange에서해야합니다. 이처럼 ...

test2 = "" 
function process(){ 
    url = "http://www.example.com/example.html" 
    var xhr = new XMLHttpRequest(); 
    xhr.open("GET", url, true); 
    xhr.onreadystatechange = function() { 
    if (xhr.readyState == 4){ 
     test2 = xhr.responseText 
     alert(test2); 
     } 
    } 
    xhr.send(); 
} 
process(); 
+0

결과를 전역 변수로 만들 수있는 방법은 절대적으로 없습니까? 스크립트의 다른 부분을 저장해야합니다. – Tom

+0

하지만, onreadystatechange 함수에서 "another part"를 실행해야합니다. 왜냐하면 responseText를 가질 것이기 때문입니다. – mohkhan

+0

@ 결과는 여전히 글로벌 변수에 저장되고 있으며 응답을받은 후에 만 ​​사용할 수 있습니다. – Abhitalks

0

동기 호출은 일반적으로 좋지 않습니다. 아마도 jQuery를 사용할 수 있습니다.

예 :

$.ajax({ 
    url: "http://www.example.com/example.html", 
    success: function(data) { 
    // now you can do something with the data 
    alert(data); 
    } 
});