0

我有一个index.php文件,我想getdata.php每 5 秒运行一次。

getdata.php返回多个需要显示在不同位置的变量index.php

我一直在尝试使用 jQuery.load()函数,但没有成功。
它正在刷新<div>上不同位置的 12 个元素index.php,但不会重新运行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等等。

更新
由于某种原因,jQuery 没有加载GatData.php文件并刷新变量。

我尝试将“Hidden_​​Data”添加到include('GetData.php'),然后变量在页面上是可读的。

如果我删除这部分,页面会显示“未设置变量”警告,提示 jQuery 没有将GetData.php脚本加载到Hidden_Data <div>.

4

3 回答 3

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 调用后将其发送回 data.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);
  });
});

我没有将 fadeOut 和 fadeIn 放入示例中,因为它有点复杂。您可以在调用 getJSON 和fadeIn 之前对所有这些元素执行fadeOut 作为结果涌入。希望这会有所帮助

于 2012-11-23T01:25:28.703 回答
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);

这种方法与您的方法之间的唯一区别是,您可以处理错误并确保获得所需的数据。

于 2012-11-23T04:05:56.033 回答
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/

于 2012-11-23T01:26:40.260 回答