2013-03-17 80 views
0

嗨,我想刷新頁面中的文本,通知有關服務器端的計算狀態,而他們正在完成。計算從獲取請求開始,刷新只有在get沒有完成時纔會發生。我試圖通過在setInterval中獲取服務器上的文本文件的內容並在GET完成後關閉該設置時間間隔來完成此操作。我的問題是,當我看到發生了什麼事情時,我只看到一個文本文件的請求,一開始就沒有。我希望從我的代碼中每隔200毫秒就會看到一個請求。 我附上了js代碼,並提前感謝你。由onclick開始的函數是disps(name);在等待GET完成時的Javascript setInterval

function instant(nn) { 
    $.get("./track.txt", function (data) { 
     $('[name|="' + nn + '"]').html(''); 
     $('[name|="' + nn + '"]').html(data); 
     /*$('[name|="'+ nn +'"]').first().html(''); 
     $('[name|="'+ nn +'"]').first().append('<img src="loading.gif">');*/ 
    }); 
} 

function disps(nn) { 
    aa = $('[name|=input_data]').val(); 
    /* $('[name|="'+ nn +'"]').html(''); 
    $('[name|="'+ nn +'"]').html('Analysed'); 
    $('[name|="'+ nn +'"]').first().html(''); 
    $('[name|="'+ nn +'"]').first().append('<img src="loading.gif">'); */ 
    var refreshId = setInterval(instant(nn), 200); 
    $.get("./loop.php?query=" + aa, function (data) { 
     /* $('[name|="'+ nn +'"]').find('img').remove().end(); */ 
     instant2(nn, refreshId); 
     $('[name|="' + nn + '"]').first().append(data); 
    }); 
} 

function instant2(nn, refreshIntervalId) { 
    clearInterval(refreshIntervalId); 
    $('[name|="' + nn + '"]').html(''); 
    $('[name|="' + nn + '"]').first().html(''); 
} 
+0

請正確縮進你的代碼。 – Bergi 2013-03-17 14:19:33

+1

在等待HTTP請求完成時執行HTTP請求是一個壞主意。 – Pointy 2013-03-17 14:19:33

+0

@積分是的,但給我一個選擇。 – Evan 2013-03-17 14:26:01

回答

2
setInterval(instant(nn) 

此調用instant(nn)立即,就像任何其他函數調用。
然後它將返回值傳遞給setInterval(),就像任何其他函數調用一樣。

這不是你想要做的。

相反,你想通過調用instant()功能:

function() { instant(nn); } 
+0

是的,就是這樣,我的壞:) thnx。 – Evan 2013-03-17 14:26:41

0

激活功能,並將結果值傳遞給setInteval,而不是傳遞函數本身的經典錯誤。

既然你想傳遞參數的功能,和setInterval不會爲你做的,你需要一個封閉 - 這是簡單的事情 - 包裝instant在一個匿名函數:

setInteval(function() { instant(nn); }, 200);