2013-07-20 23 views
0

我正在嘗試長輪詢,它與文本文件工作,但我不能讓它從表中返回的一切。如何使用json從表中返回數據行?

var timestamp = null; 
function waitForMsg() { 
    $.ajax({ 
     type: 'GET', 
     url: 'update.php?timestamp=' + timestamp, 
     async: true, 
     cache: false, 

     success:function(data) { 
      // alert(data); 
      var json = eval('('+data+')'); 
      if (json['msg'] != '') { 
       $('div.alltext').html(json['msg']); // MD 
      } 
      timestamp = json['timestamp']; 
      setTimeout('waitForMsg()', 1000); 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown) { 
      // alert('error '+textStatus+'('+errorThrown+')'); 
      setTimeout('waitForMsg()', 1000); 
     } 
    }); 
} 

update.php

$filename = 'test.txt'; 

$lastmodif = isset($_GET['timestamp']) ? $_GET['timestamp'] : 0; 
$currentmodif = filemtime($filename); 

while ($currentmodif <= $lastmodif) { 
    usleep(10000); 
    clearstatcache(); 
    $currentmodif = filemtime($filename); 
} 
// how to rewrite the following? 
$response = array(); 
$response['msg'] = file_get_contents($filename); 
$response['timestamp'] = $currentmodif; 
echo json_encode($response); 

如何重寫了最後一部分得到的一切,從一個數據庫表?

編輯:

我嘗試以下,但它只返回一個結果,而不是最新的一個,但一個前。

$response = array(); 

while($row = mysqli_fetch_assoc($r)) { 
    $nou = $row['f1']; 
    $nru = $row['f2']; 
    $ntext = $row['content']; 
    $ntime = $row['time']; 
} 

$response['msg'] = $ntext; 
$response['timestamp'] = $currentmodif; 
+0

所以 - 你做一個研究如何爲數據庫的工作? –

+0

是的。我現在會發布我試過的東西。 –

+0

你可以發佈你已經執行的SQL查詢嗎? –

回答

0

你循環之外分配價值,因爲你得到最後的結果。在循環內分配值。

$response = array(); 

while($row = mysqli_fetch_assoc($r)) { 
    $nou = $row['f1']; 
    $nru = $row['f2']; 
    $response['msg'] = $row['content']; 
    $response['timestamp'] = $row['time']; 
} 

echo json_encode($response); 
+0

這似乎是工作!只有一件事:我現在每次都得到重複的結果,所以如果我寫「嘿」,然後「你好」,我會再次得到「嘿」,然後「你好」,等等。基本上,當我插入一段新的文本時,前一個文本首先重複。 –

0

使用array取代$ntext = $row['content'];$ntext[] = $row['content'];