2016-03-20 147 views
2

我有一個儀表板頁面,用於檢查顯示在頁面上的更新的json響應。網頁和網站的其他部分與顯示它的瀏覽器位於同一臺機器上。它打算留在,並在該頁上不斷。它由兩部分組成:一個ja​​vascript/jquery fetcher,它調用一個讀取數據庫的PHP頁面,如果內容已更改,則返回「有效內容」值;如果不是,則僅檢查最後一次檢查的時間戳。它的工作原理目前拉動的音符,因爲他們改變,但它有問題Ajax請求在儀表板頁面上崩潰瀏覽器

確定的問題:

1:在鍍鉻控制檯收到此消息每次頁面加載:

同步的XMLHttpRequest的主線程由於對最終用戶的體驗有不利影響而不推薦使用。如需更多幫助,請查詢http://xhr.spec.whatwg.org/

2:我已經注意到,在將此頁面添加到瀏覽器之後,瀏覽器所使用的RAM數量大量增加。大約4小時後,瀏覽器崩潰。

JS代碼:

var lastcheck; 
var content_main = $('#notes'); 
$(document).ready(function() { 
     $.ajaxSetup({ cache: false }); 
      setInterval(function() { 
       updateJson(); 
      }, 5000); 
}); 

function updateJson() { 
    var request = '/sections/noteboard/notes.php?new=1&timestamp='+ (lastcheck ? lastcheck : 0); 

    $.ajax({ 
    url: request, 
    dataType: 'json', 
    async: false, 
    cache: false, 
    success: function(result) { 
     if (result.payload) {  // new data 
     lastcheck = result.time; // update stored timestamp 
     content_main.html(result.payload); // update html element 
     } else {      // no new data, update only timestamp 
     lastcheck = result.time; 
     } 
    } 
    }); 
} 

的PHP代碼:

$timestamp = 0; 
$where = ''; 
if (isset($_GET['timestamp'])) { 
    $timestamp = $_GET['timestamp']; 
} 
if ($timestamp) { 
$where = ' WHERE timing >= '.$timestamp; 
} 
$result = $mysqli->query("SELECT * FROM `mirror_notes` ". $where ." ORDER BY `id` DESC LIMIT 0,1"); 
$row_cnt = $result->num_rows; 
$output = array(); 
$myrow = $result->fetch_array(MYSQLI_ASSOC); 
if ($row_cnt=='1' && $myrow['message'] !== '') { // do we have any script output ? 
    $output['payload'] = stripslashes($myrow['message']); // your current script output would go in this variable 
} 
$output['time'] = time();  // so we know when did we last check for payload update 
$json = json_encode($output, ((int)JSON_NUMERIC_CHECK)); // jsonify the array 
echo $json;     // send it to the client 
$result->close(); 
$mysqli->close(); 
exit(); 

任何幫助是極大的讚賞,因爲我與jQuery的初學者,也只有謙虛地用PHP更好。 謝謝

+0

我強烈建議爲您的查詢使用準備好的語句。始終是一個可怕的想法將瀏覽器輸入連接到查詢中,而不進行清理。搜索「sql注入」。 –

+0

確實,如果此頁面在我們的本地網絡之外可用,我會更關注SQL注入。它是一個儀表板頁面,託管在爲其運行瀏覽器的同一臺計算機上。 –

回答

0

我不認爲有人會讓瀏覽器打開很長時間纔會崩潰。

一個簡單的解決方案是使用套接字。用php打開一個套接字並且開始與瀏覽器通信並不難。你應該看看。

+0

那麼這個頁面就是一個儀表板,所以如果你這麼想的話,它的目的就是無限地打開 –

+0

,那麼你應該看看套接字。 –

+0

我不明白插座怎麼會比ajax更好的瀏覽器頁面的客戶端更新...? –