0

我现在挣扎了一段时间,我找不到这段代码不起作用的原因。

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

2 回答 2

2

AJAX 是异步的。

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

于 2012-04-22T14:56:53.693 回答
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 调用。

于 2012-04-23T14:11:06.023 回答