2012-10-22 55 views
0

我不知道我的代碼有什麼問題,即使我更改目標文件的內容,它仍然不會刷新iframe。如果源頁面更改自動重新加載iframe

<script type="text/javascript"> 
var page = 'data/apps/<? echo $_SESSION['name']; ?><? echo $_SESSION['last']; ?>App.html', lM; 

function checkModified(){ 
    $.get(page, function(a,a,x){ 
     var mod = x.getResponseHeader('last-modified'); 
     if(lM != mod){ 
     lM = mod; 
     document.getElementById("frame").src += ""; 
     } 
    } 
} 

setInterval(checkModified, 5000); // every 5 seconds 
</script> 

我想達到的目標是當有目標頁面上的變化時,iframe將自動重新加載自身,這樣的變化可以顯示給用戶。這兩個頁面都位於同一個域中。

+0

你說的目標網頁是什麼意思?包含iframe或iframe中的頁面的頁面? – tagawa

+0

啊,我明白了 - 你的意思是iframe中的頁面。 – tagawa

回答

1

首先,在$.get方法末尾有一個缺失的右括號「)」。

但是,主要的問題可能是您的服務器沒有發送正確的Last-Modified標題。我測試的服務器沒有發送任何數據,這意味着mod未定義。解決方法是檢查Content-Length。這並不理想,因爲編輯過的頁面不一定會改變大小,但看起來您控制着頁面,所以您可以確保添加額外的字節來強制刷新。

這裏是你的checkModified功能更新,這應該工作:

function checkModified() { 
    $.get(page, function(a, b, x) { 
     var mod = (x.getResponseHeader('Last-Modified')) ? x.getResponseHeader('Last-Modified') : x.getResponseHeader('Content-Length'); 
     if (lM != mod) { 
     lM = mod; 
     console.log('Fetched'); 
     document.getElementById("frame").src += ""; 
     } 
    }); 
} 
+0

對我不起作用! – telexper

+0

只想首先檢查簡單的事情:您正在編輯幾個字節(不只是更改單個字符),而是將其託管在服務器上而不是file:// localhost? – tagawa

+0

工作時它只有這個「x.getResponseHeader('Content-Length');」 – telexper

相關問題