2012-04-22 4 views
0

지금 당분간 어려움을 겪고 있습니다.이 코드가 작동하지 않는 이유를 찾을 수 없습니다.자바 스크립트 변수가 정의되지 않음으로 표시됩니다.

#submitmsg를 클릭하면 PHP 파일에서 시간을 가져 오는 다른 기능이 실행됩니다. 이것은 일종의 chat-box이며이 경우에는 Name (즉 Ja)을 표시해야하고 그 옆에 varible "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

아약스는 비동기이므로 자바 스크립트는 시간 메서드를 실행하기 위해 대기하지 않습니다. 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); 
     } 

    }); 
}); 

주를 작성해야합니다.

관련 문제