2012-04-22 24 views
0

私はしばらくの間苦労していますが、私はこのコードがうまくいかない理由を見つけることができません。Javascript変数が未定義として表示される

#submitmsgをクリックすると、phpファイルから時間を取得する別の機能が起動されます。これはソートチャットボックスであり、このケースでは名前(これはJa)が表示され、その隣に「var」「tajm」が表示されます。 undefinedが時間の代わりに表示されています。

なぜこの作品はありませんか?

コードは以下のスニペット:

var tajm; 

$(document).ready(function() { 
    $("#submitmsg").click(function() { 
     time(); 
     var newtext = $("#textmsg").val(); 
     var oldtext = document.getElementById("textbox").innerHTML; 
     document.getElementById("textbox").innerHTML = oldtext + "<br/><div id='name'>Ja:  " + tajm + "</div><div id='red'>" + newtext + "</div>"; 
     $("#textbox").scrollTop($("#textbox")[0].scrollHeight); 
    }); 
}); 

function time() { 
    var ajax = new XMLHttpRequest(); 
    ajax.onreadystatechange = function() { 
     if (ajax.readyState == 4) { 
      tajm = ajax.responseText; 
     } 
    }; 
    ajax.open("GET", "r.php", true); 
    ajax.send(null); 
} 
+0

非同期HTTP要求に時間がかかります。 – Pointy

+0

コードが "通常"の順序で実行された場合、コールバック( 'ajax.onreadystatechange')を提供する必要はありません。 –

+0

私はこれを修正するためにsetTimeoutを追加し、ちょっと遅延させました。私はこれを行うことができるより効率的な方法はありますか? – xtra

答えて

2

AJAXは非同期です。

コールバックは、コードの残りの部分が終了してからしばらく時間がかかります。

0

ajaxは非同期であるため、Javaスクリプトは時間メソッドを実行するのを待つことはありません。 uはあなたのAJAX呼び出しをロードするために待機を与えるrのため、設定した時間ワークアウトされています。この場合 は、uがコードスニペット形式の下

$(document).ready(function() { 
    $("#submitmsg").click(function() { 
     $.load("r.php",function(){ 
      var newtext = $("#textmsg").val(); 
      var oldtext = document.getElementById("textbox").innerHTML; 
      document.getElementById("textbox").innerHTML = oldtext + "<br/><div id='name'>Ja:  " + tajm + "</div><div id='red'>" + newtext + "</div>"; 
      $("#textbox").scrollTop($("#textbox")[0].scrollHeight); 
     } 

    }); 
}); 

注意を記述する必要があります。

関連する問題