2012-02-15 2 views
0

これはPHPページからデータを取得するXMLHttpRequestのコードです。 "if"の中の変数user_dataに警告すると、それは動作します。しかし、このコードのすべての下では、変数はもう存在しません。変数がコードの外に存在しない

ありがとうございました!

if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    user_data = xmlhttp.responseText; 
    alert (user_data); //THIS WORKS 
    } 
    } 
xmlhttp.open("GET","http://myurl.com/index.php",true); 
xmlhttp.send(); 
alert (user_data); //THIS DOESN'T WORK 
+4

これは、Ajaxが非同期であるためです。 'onreadystatechange'コールバックは、リクエストが完了したとき、2回目のアラート後にのみ呼び出されます。 –

答えて

5

これは非同期要求です。非稼動アラートは、要求が戻る前に実行されます。変数は、要求が完了するまで割り当てられません。

0

あなたが再びそれを参照する場合はnullのためにそれをチェックすることを忘れてはいけない

var user_data = null; 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    user_data = xmlhttp.responseText; 
    alert (user_data); //THIS WORKS 
    } 
    } 
xmlhttp.open("GET","http://myurl.com/index.php",true); 
xmlhttp.send(); 

スコープ

の外になっています。

0

xmlhttp.send();コントロールはリクエストの実行を開始してから、このリクエストに対する何らかの応答があるとすぐにonreadystatechange=function()ブロックに移動します。

+0

関数からvarを取得するにはどうすればよいですか? –

+0

user_dataをグローバルとして定義します。コールバック関数を使用し、値をuser_dataに設定します。その後、警告することができます。 – kosa

関連する問題