1

私のアプリケーションでは、しばらくしてサーバーに何かを送信したいと考えています。AJAXを使用して実装しました。しかし、初めて機能しますが、再帰的には機能しません。そのために setTimeOut() を使用しました。

    var xmlHttp;
    var requestURL = 'http://localhost:1092/ClassicAJAXDemo/UpdateHeartbeat.aspx?name=';

    function show_data(strName)
    {
        if (strName.length > 0)
        {
            var url = requestURL + strName;
            xmlHttp = GetXmlHttpObject(stateChangeHandler);
            xmlHttp_Get(xmlHttp, url);
        }
    }
    function stateChangeHandler()
    {
        if (xmlHttp.readyState == 4)
        {
            var str = xmlHttp.responseText;
            setTimeOut(show_data('Dev'), 10000); // It is not waiting for 10 seconds.
        }
    }

    function xmlHttp_Get(xmlhttp, url)
    {
        xmlhttp.open('GET', url, true);
        xmlhttp.send(null);
    }

    function GetXmlHttpObject(handler)
    {
        return new XMLHttpRequest();
    }
    window.onload = show_data('Dev');
4

4 に答える 4

5

このコード セグメントには、バグを作成しているいくつかの問題があります。

window.onload = show_data('Dev');

window.onload = show_data('Dev');が機能しない 理由について少し説明すると、おそらくwindow.onload適切です。関数である必要があります。コードが実行されると、評価show_data('Dev')され (値は返されませんが、XMLHTTPRequest が開始されるため、動作しているように見えます)、実行されwindow.onload = undefined;ます。

window.onload=show_data;動作しますが、パラメーターが渡されません。

幸いなことに、JavaScript を使用すると匿名関数を作成できます。これにより、次のことが可能になります。

window.onload = function() { show_data('Dev'); };

setTimeOut(show_data('Dev'), 10000);

まず第一に、JavaScript は大文字と小文字を区別する言語です。 setTimeOut !== setTimeout. また、setTimeout/setInterval の最初のパラメーターは関数であると予想されます。これは、ここで行ったのと同じ問題に悩まされ、 をwindow.onload呼び出しますsetTimeout(undefined, 10000);が、要求をすぐに実行します。また、呼び出されたのと同じように呼び出すことを意味していると思いますstrName

タイムアウト セットは次のようになります。

setTimeout(function() {show_data(strName);}, 10000); 

補足事項 -どちらsetInterval()も実行時にsetTimeout()取得される文字列を渡すことができますが、次のようなメソッドを使用しないことをお勧めします。eval()

// please dont use me
setTimeout("show_data(strname)", 10000);

この時点で、これらの 2 行で編集するとコードが機能するはずです。この残りの部分は、他の最適化です

setTimeout()対。setInterval()

これは、ajax リクエストが失敗しない限り、10000 ミリ秒ごとにチェックし続けるように思われます。その後、停止します。永遠に投票したかっただけだと思います。 setInterval()「繰り返し」タイマーを設定できます。

行を削除して、次setTimeoutのものに置き換えますwindow.onload

var updateInterval;
window.onload = function(){ 
  updateInterval = setInterval(function(){ show_data('Dev'); }, 10000);
};

// an example - lets stop polling 35 seconds from now
setTimeout(function() {
 clearInterval(updateInterval);
}, 35000);
于 2009-09-19T07:10:59.400 に答える
2

交換

window.onload = show_data('Dev');

window.onload = function() {
   var intervalID = setInterval( function(){ show_data('Dev')}, 10000);
}

そして取り除く

setTimeOut(show_data('Dev'), 10000);

関数からstateChangeHandler

間隔をクリアすることを忘れないでください

使用して

clearInterval(intervalID);

setIntervalとの違いはsetTimeoutsetTimeout()式を 1 回だけトリガーするのに対し、setInterval()(停止するように指示しない限り) 式を何度もトリガーし続けることです。

于 2009-09-19T06:05:24.463 に答える
1

window.onload メソッドは間違いなく間違っています。これを次のように置き換えます。

window.onload = function(){var intervalID = setInterval(function(){show_data('Dev')}, 10000);}

ここでの他の回答は他の問題をカバーしているように見えるので、触れません。乾杯

于 2011-10-13T20:06:04.607 に答える
1

それ以外の:

setTimeOut(show_data('Dev'), 10000);

試してみましたか?

setTimeOut(function() { show_data('Dev') }, 10000);

?

于 2009-09-19T07:08:30.233 に答える