2

だから私はajaxを使ってPOST経由で5秒ごとにいくつかのデータを取得しています。私が達成しようとしているのは、phpファイルが何かを出力した場合、何らかの方法でsetIntervalを停止するか、9999999に設定することです。

これが私が試したことです:

var interval = DEFINEDFROMMYQL;
        $(function() {
            setInterval(function() {
                $.ajax({
                    type: "POST",
                    url: "url/file.php",
                    data: "whatever=2", 
                    success: function(html) {
                        $("#new").html(html);
                        if(html.lenght > 0) {
                            var interval = 99999999999999;
                        }
                   }
                });
            }, interval);
        });

私は初心者なので、どんな助けでもありがたいです。

4

2 に答える 2

1

clearInterval()を使用して、によって開始されたタイマーを停止し、タイプミス を次setIntervalのように修正できます。 html.lenghthtml.length

// var interval = DEFINEDFROMMYQL;
$(function() {
yourInterval = setInterval(function() {
$.ajax({
           type: "POST",
           url: "url/file.php",
           data: "whatever=2", 
           success: function(html) {
                    $("#new").html(html);  

                    if(html.length > 0) {
                    ///var interval = 99999999999999;
                      clearInterval(yourInterval);
                    }
             }
         });
   }, interval);
});
于 2013-01-03T01:45:04.247 に答える
1

これはいくつかの異なる方法で処理できますが、質問 (「setinterval を何らかの方法で停止する」) に基づいて、実装を に切り替え、setTimeoutコードを呼び出し可能な関数にリファクタリングしましょう。そう...

var interval = DEFINEDFROMMYQL;
$(function() {

    // establish a function we can recall
    function getDataFromServer(){
        // this encapsulates the original code in a function we can re-call
        // in a setTimeout later on (when applicable)
        $.ajax({
            type: "POST",
            url: "url/file.php",
            data: "whatever=2", 
            success: function(html) {
                $("#new").html(html);

                // only if the length is 0 do we re-queue the function
                // otherwise (becase it's setTimeout) it will just die
                // off and stop.
                if(html.lenght == 0) {
                    setTimeout(getDataFromServer, interval);
                }
           }
        });
    }
    // make an initial call to the function to get the ball rolling
    setTimeout(getDataFromServer, interval);
    // if you want it to execute immediately instead of wait out the interval,
    // replace the above line to simply:
    //getDataFromServer();
});
于 2013-01-03T01:49:46.767 に答える