2012-11-23 51 views
0

我有一個index.php文件,我想每5秒運行getdata.php每x秒刷新多個PHP值的最佳方式?

getdata.php返回需要index.php顯示在不同的地方多個變量。

我一直在試圖使用jQuery​​函數沒有運氣。
讓人耳目一新,在上index.php各個地方的12個<div>元素,但它不是重新運行getdata.php文件應該得到的最新數據。

但是,如果我點擊瀏覽器刷新按鈕,數據刷新。

getdata.php返回約15個變量。

下面是一些示例代碼:

<script> 
    var refreshId = setInterval(function() 
    { 
     $('#Hidden_Data').load('GetData.php'); // Shouldn´t this return $variables 
     $('#Show_Data_001').fadeOut("slow").fadeIn("slow"); 
     $('#Show_Data_002').fadeOut("slow").fadeIn("slow"); 
     $('#Show_Data_003').fadeOut("slow").fadeIn("slow"); 
     $('#...').fadeOut("slow").fadeIn("slow"); 
    }, 5000); // Data refreshed every 5 seconds 
    */ 
</script> 

下面是GetData.php一個例子:

$query = "SELECT column1, COUNT(column2) AS variable FROM table GROUP BY column"; 
$result = mysql_query($query) or die(mysql_error()); 

while($row = mysql_fetch_array($result)){ 
$column1 = $row['column1 ']; 
$variable = $row['variable ']; 

if($column1 == "Text1") { $variable1 = $variable; } 
    elseif($column1 == "Text2") { $variable2 = $variable; } 
       ... continues to variable 15 ... 
} 

然後進一步向下頁面的HTML元素顯示數據:

<div id="Hidden_Data"></div> 
<div id="Show_Data_001"><?php echo $variable1; ?></div> 
<div id="Show_Data_002"><?php echo $variable2; ?></div> 
<div id="Show_Data_003"><?php echo $variable3; ?></div> 
... 

我使用這裏建議的數據參數嘗試: https://stackoverflow.com/a/8480059/498596

但我不能完全理解如何加載所有的變量每5秒,並呼籲他們的索引頁。

今天GetData.php頁面只是返回$variable1 = X; $variable2 = Y等。

UPDATE
出於某種原因,jQuery是不加載GatData.php文件並刷新變量。

我嘗試將「Hidden_​​Data」添加到include('GetData.php'),然後變量在頁面上可讀。

如果我刪除此部分,頁面顯示「變量未設置」警告,提示jQuery沒有將GetData.php腳本加載到Hidden_Data<div>中。

+0

「Hidden_​​Data」內部是否有'Show_Data_001',2和3個元素並由'GetData.php'返回,或者他們已經在您的頁面上的其他地方? – nnnnnn

+0

我把「Hidden_​​Data」作爲一個單獨的元素在外面。剛剛添加到上面的代碼。 –

+0

'.load()'方法將內容加載到指定的元素('Hidden_​​Data')中,它不會在一般意義上刷新頁面的其餘部分,更具體地說,它不知道有關PHP變量的任何信息。瀏覽器不知道或不關心該頁面是否具有從PHP設置的動態內容 - 當您使用瀏覽器的「查看頁面源」選項時,您看到的是瀏覽器收到的內容。如果'GetData.php'只是爲了返回這些變量的新值,最好將它改爲返回JSON,然後使用jQuery'$ .getJSON()'方法調用它並處理結果。 – nnnnnn

回答

2

嘗試

<script> 
     var refreshId = setInterval(function() 
     { 
      $('#Hidden_Data').load('GetData.php', function() { // Shouldn´t this return $variables 
       $('#Show_Data_001').fadeOut("slow").fadeIn("slow"); 
       $('#Show_Data_002').fadeOut("slow").fadeIn("slow"); 
       $('#Show_Data_003').fadeOut("slow").fadeIn("slow"); 
       $('#...').fadeOut("slow").fadeIn("slow"); }); 
     }, 5000); // Data refreshed every 5 seconds 
     */ 
    </script> 

以上是假設,你的代碼片斷返回HTML元素(Show_Data_XXX),但現在你已經澄清上述不會幫助你孤單你的問題......

什麼你需要做的是在你的PHP發回新的價值元素,或將你的結果作爲數據發回並更新現有的元素。

將您的元素放入一個php數組中,然後將其發送回 數據。SQL調用後PHP

$results = Array(); 
while($row = mysql_fetch_array($result)){ 
    $column1 = $row['column1 ']; // change Text1 in db to Show_Data_001 in html or vice versa 
    $variable = $row['variable ']; 
    $results[$column1] = $variable; 
} 

echo json_encode($results); 
在JavaScript這樣的事情

...

$.getJSON('GetData.php',function(data) { 
$.each(data, function(key, val) { 
    $('#'+key).text(val); 
    }); 
}); 

我沒有把淡出和淡入到示例,因爲它複雜化了一點。在調用getJSON和fadeIn之前,你可以對所有這些元素進行淡入淡出。希望這可以幫助

+0

我似乎無法得到這個工作。 DIV淡入淡出,但它沒有從GetData.php獲取最新的變量更新 –

+0

我看到你給了更多的輸入。我假設你的GetData.php用#Show_Data_XXX元素替換#Hidden_​​Data div數據。如果你實際上以某種格式返回數據。您需要將其插入數據元素。例如,將結果存儲到PHP數組中,然後對其進行json_encode編碼。然後你可以使用jquery parseJSON函數將它變回數組。我會稍微修改我的答案。 – CodeBro

+0

感謝CodeBro。這工作像一個魅力:) –

0

你能告訴我GetData.php的代碼嗎?

不是使用Jquery.load,而是使用$ .post或$ .get實際獲取頁面,並將結果從GetData.php格式化爲Json或xml,您可以輕鬆將其映射到您的javascript。

使用$ .post它將允許您從GetData.php獲取值之後進行回調,並且您可以檢查它是否正常工作。如果它從你的GetData.php獲取數據,那麼你可以將它填充到你的DIV元素。

您可以查看詳細信息,關於POST和GET在這裏: http://api.jquery.com/jQuery.post/

+0

嗨,我只是添加了一個GetData.php演示到原來的職位。 –

1

首先,確保你有從服務器正確的反應,就像這樣:

//We won't use load() to load content for now 
window.setInterval(function(){ 

    $.ajax({ 
     url : "path_to_your_php_script.php", 
     type : "GET", 
     beforeSend: function(){ 
     //here you can display, smth like "Please wait" in some div 
     }, 
     error : function(msg){ 
     //You would know if an error occurs 
     alert(msg); 
     }, 
     success : function(respondFromPHP){ 
     //Are you getting distinct results every 5 sec? 
     alert(respondFromPHP); 
     return; 
     //if respondFromPHP contains data you want 
     //ONLY THEN, add some effects 
     } 
    }); 

}, 5000); 

這之間的唯一區別方法和你的,是,你可以處理錯誤,並確保你得到你想要的數據。

+0

這實際上可以解決我的問題。我一直在試圖解決如何返回php變量數據並將其打印在頁面上的各種DIV中。只是無法弄清楚:( –