1

home.html

front page test

test.php

<SCRIPT language="JavaScript" SRC="ajax.js"></SCRIPT>
<button type="button" onclick="callAJAX('home.html','displaydiv')">Click Me!</button>
<div id="displaydiv"></div>

ajax.js

function callAJAX(url, pageElement, callMessage) {
    document.getElementById(pageElement).innerHTML = callMessage;
    try {
        req = new XMLHttpRequest(); /* e.g. Firefox */
    } catch(e) {
        try {
            req = new ActiveXObject("Msxml2.XMLHTTP");
            /* some versions IE */
        } catch (e) {
            try {
                req = new ActiveXObject("Microsoft.XMLHTTP");
                /* some versions IE */
            } catch (E) {
                req = false;
            }
        }
    }

    req.onreadystatechange = function() {responseAJAX(pageElement);};     
    req.open("GET",url,true);
    req.send(null);

}

function responseAJAX(pageElement) {
    console.log(req.readyState);
    var output = '';
    if (req.readyState == 4) {
        if (req.status == 200) {
             output = req.responseText;
             document.getElementById(pageElement).innerHTML = output;
        }
    }
}

上記のコードは主にここからのものです:

質問:

  1. このサイトによると、onreadystatechange には、readyState プロパティが変更されるたびに自動的に呼び出される関数 (または関数の名前) が格納されているため、いつreadyStateプロパティが変更されますか? 後req.send(null);

  2. この行の場合: console.log(req.readyState);Chrome コンソールでは、次のように表示されます: 1 2 3 4、0 を出力しません0: request not initialized

4

1 に答える 1

1

readyState はいくつかの場所で変更されています。詳細については、 Mozilla のドキュメントを参照してください。req.readyState = 0 は、req.open() がまだ呼び出されていないことを意味します。

また、このコードでサポートしようとしているブラウザーに応じて、コードを次のように変更する req.onload() 関数を含むXHR2の機能の一部を使用することを検討できます。

function callAJAX(url, pageElement, callMessage) {
    var elem = document.getElementById(pageElement);
    elem.innerHTML = callMessage;
    var req = new XMLHttpRequest();
    req.onload = function() {
        elem.innerHTML = req.responseText;
    };     
    req.open("GET",url,true);
    req.send(null);
}
于 2013-07-10T02:58:32.253 に答える