显示为未定义的Javascript变量

显示为未定义的Javascript变量,javascript,Javascript,我现在挣扎了一段时间,我找不到这个代码不能工作的原因 当点击#submitsg时,它将触发另一个函数,该函数从php文件获取时间。这是sorta聊天框,在这种情况下,它应该显示名称(即Ja)和旁边的时间,它是可变的“tajm”。虽然未定义的是显示而不是时间 你知道为什么这个不行吗 下面的代码片段: var tajm; $(document).ready(function () { $("#submitmsg").click(function () { time();

我现在挣扎了一段时间,我找不到这个代码不能工作的原因

当点击#submitsg时,它将触发另一个函数,该函数从php文件获取时间。这是sorta聊天框,在这种情况下,它应该显示名称(即Ja)和旁边的时间,它是可变的“tajm”。虽然未定义的是显示而不是时间

你知道为什么这个不行吗

下面的代码片段:

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);
}
var-tajm;
$(文档).ready(函数(){
$(“#submitmsg”)。单击(函数(){
时间();
var newtext=$(“#textmsg”).val();
var oldtext=document.getElementById(“textbox”).innerHTML;
document.getElementById(“textbox”).innerHTML=oldtext+“
Ja:“+tajm+”“+newtext+”; $(“#文本框”).scrollTop($(“#文本框”)[0]。scrollHeight); }); }); 功能时间(){ var ajax=new-XMLHttpRequest(); ajax.onreadystatechange=函数(){ if(ajax.readyState==4){ tajm=ajax.responseText; } }; open(“GET”,“r.php”,true); send(null); }
AJAX是异步的


回调只在其余代码完成后运行一段时间。

由于ajax是异步的,java脚本从不等待执行time方法。 在这种情况下,您需要编写以下代码段格式

$(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);
        }

    });
});
$(文档).ready(函数(){
$(“#submitmsg”)。单击(函数(){
$.load(“r.php”,function()){
var newtext=$(“#textmsg”).val();
var oldtext=document.getElementById(“textbox”).innerHTML;
document.getElementById(“textbox”).innerHTML=oldtext+“
Ja:“+tajm+”“+newtext+”; $(“#文本框”).scrollTop($(“#文本框”)[0]。scrollHeight); } }); });

注意:设置超时正在工作,因为您正在等待加载ajax调用。

异步HTTP请求需要时间。如果代码以“正常”顺序执行,则不必提供回调(
ajax.onreadystatechange
)。我通过添加setTimeout并将其延迟一段时间来修复此问题。是否有更有效的方法可以使用@xtra完成此操作?@xtra是的--在回调中完成它所属的工作。