2011-04-21 67 views
1

這可能嗎?現在,我已經完成了實時聊天,在jQuery的幫助下,我連接到.php文件並檢查最後修改的時間,如果它不像以前那樣,我檢索郵件。如果在JavaScript中可能,我可能會節省大量資源。javascript可以找到文件上次修改時間嗎?

謝謝。

+0

如果可以使用jQuery,那麼它可以在普通的舊Javascript中使用。你能分享你用jQuery做了什麼嗎? – Jonathan 2011-04-21 15:55:38

+0

但客戶端實際上並沒有收到php文件,他們確實收到了運行該文件的輸出。我有我的懷疑,客戶可以確定這一點,但我會有興趣地看這個問題。 – 2011-04-21 15:56:44

+0

@Jonathan:我使用jQuery的ajax,並使用.php文件。 – 2011-04-21 15:58:34

回答

1

簡短的回答:沒有辦法,但AJAX +服務器端腳本(在你的情況是,jQuery + PHP)

作爲一個客戶端腳本,javascript中獲取客戶端的計算機上運行,所以如果你想檢查的m文件在服務器上,那麼你使用AJAX和服務器端腳本是正確的。沒有其他辦法可行。

如果你想檢查的m-time文件在客戶端的計算機上,那麼你的運氣不好。 Javascript被故意設計爲阻止訪問客戶端的文件。 (它只能訪問餅乾,這客戶端的計算機上,但是,因爲瀏覽器(沒有任何JavaScript)加載這些納入其工作環境。)

+1

這不是真的,你可以用新的FileReader API訪問本地文件,它是HTML5的一部分。你需要用戶爲你選擇文件,但是你不能只是開始嗅探他們的系統。 – 2011-04-21 16:11:04

+0

啊,真夠的。我沒有想到編碼器會檢查這樣的文件的元數據。 – JellicleCat 2011-04-21 19:23:08

0

也許可以使用HTTP ETag頭來檢查頁面是否已更改。第一個響應包含ETag,並且您的客戶端將它用於以下請求。如果頁面未被修改,您的PHP服務器端代碼將發送304。

http://en.wikipedia.org/wiki/HTTP_ETag

11

這是絕對有可能,如果服務器發送一個準確的最後所該特定文件的修改標題:

var getMTime = function(url, callback) { 
    var xhr = XMLHttpRequest(); 
    xhr.open('HEAD', url, true); // use HEAD - we only need the headers 
    xhr.onreadystatechange = function() { 
    if (xhr.readyState === 4 && xhr.status === 200) { 
     var mtime = new Date(xhr.getResponseHeader('Last-Modified')); 
     if (mtime.toString() === 'Invalid Date') { 
     callback(); // dont want to return a bad date 
     } else { 
     callback(mtime); 
     } 
    } 
    } 
    xhr.send(); 
}; 

getMTime('url here', function(mtime) { 
    if (mtime) console.log('the mtime is:' + mtime.toISOString()); 
}); 
+0

'var xhr = XMLHttpRequest();'在我的Chrome中失敗了,所以我用'.ajax'完成了這個工作,並且在那裏工作。 +1只需稍作修改即可獲得有用的答案。 – Maslow 2013-01-29 18:00:54

相關問題