Javascript变量显示为未定义

时间:2012-04-22 14:53:57

标签: javascript

我现在苦苦挣扎了一段时间,我找不到这段代码无效的原因。

当点击#submitmsg时,它应该触发另一个从php文件中获取时间的函数。这是sorta聊天框,它应该在这种情况下显示Name(这是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);
}

2 个答案:

答案 0 :(得分:2)

AJAX 异步

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

答案 1 :(得分:0)

由于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);
        }

    });
});

注意:设置超时正常,因为你等待加载你的ajax调用。