2012-05-13 96 views
0

我使用$ .getJSON从PHP脚本接收一些数据(JSON编码)。它由10个数据集({“key”:“data”,...})组成。我想先打印出所有的数据,然后用新的数据替换旧的数据,最后将其删除。这将在一个循环内发生。使用getJSON和循环打印数据

处理数据集时,函数会自行调用并获取下10个数据集来打印它们。等等。

function getText(){ 

    $.getJSON("getText.php", 
     function(data){ 
      for(key in data){ 
       //alert(key); 
       if($("#wrapper").css("display") == "block") 
        $("#wrapper").fadeOut(500); 

       $("#wrapper").html(data[key]).fadeIn(500); 
      } 
    }); 
    //alert("end"); 

    setTimeout(function(){ 
     getText(); 
    },20000); 
} 

随着一些警报正确数据集显示,但没有他们刚刚从数据集中的最后或第一数据displayed.Can有人帮我请?

简化只有一个div(#wrapper)。在页面加载并显示一些信息之后,函数getText被称为第一次。现在调用PHP脚本,我们收到十个数据集。在函数再次调用之前,每个函数都应该显示。例如:淡入包装,显示数据#1,淡出包装;淡入包装,显示数据#2,淡出包装,等等,直到每个数据(十分之一)都不显示。循环应该以某种方式等待动画。包装中的文字应该被替换。

回答

1

鉴于你更新试试这个:

function getText(){ 
var storage = {}; 
$("#wrapper").html('').fadeOut(500); 
    $.getJSON("getText.php", 
     function(data){ 
     storage.data = data; 
        }); 
    for (var i in storage.data) 
     { 
      $("#wrapper").html(storage.data[i]).fadeIn(500).delay(5000).fadeOut(500); 
      if (i == storage.data.length-1) 
      { 
       setTimeout(function(){ 
       getText(); 
       },50000); 
      } 
     } 
} 

OR

setInterval('getText',20000); 
function getText(){ 
    var storage = {}; 
     $.getJSON("getText.php", 
      function(data){ 
      i = (typeof(storage.i) != "undefined") ? storage.i : 0; 
     setInterval(function() { 
       $("#wrapper").fadeOut(500).html(storage.data[i]).fadeIn(500); 
storage.i = i+1; 
},2000); 

      }); 
    } 
+0

对不起,这不是我想象的。简化的只有一个div(#wrapper)。在页面加载并显示一些信息之后,函数getText被称为第一次。现在调用PHP脚本,我们收到十个数据集。在函数再次调用之前,每个函数都应该显示。例如:淡入包装,显示数据#1,淡出包装;淡入包装,显示数据#2,淡出包装,等等,直到每个数据(十分之一)都不显示。循环应该以某种方式等待动画。包装中的文字应该被替换。感谢您的帮助到目前为止:) – Thrukal

+0

尝试这些更新 –

+0

随着一些调整,我认为这将工作正常。谢谢 :) – Thrukal

0

那么,我想,这是你+/-要找的内容..

function getText(){ 
    $.getJSON("getText.php", function(data) { 
     var keys = []; 
     for(var key in data){ 
      keys.push(key); 
     } 

     function displayData() { 
      var key = keys.pop(); 
      $("#wrapper").html(data[key]).fadeIn(500, function(){ 
      if(keys.length>0) { 
       // Still some data available .. 
       displayData(); 
      } else { 
       // All data has been displayed .. get some new from server .. 
       getText(); 
      } 
      }); 
     } 

     // If some data is available, show first .. 
     if(keys.length>0) { 
      displayData(); 
     } 
    }); 
} 
+0

恩,那就对了。它甚至应该被替换。 Ist应该只能同时显示一个数据集。然后它应该淡出,另一个数据集应该淡入。为此,我希望循环等待。我希望你知道,我的意思是。 – Thrukal