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 に答える