使用getJSON和循环打印数据

时间:2012-05-13 09:50:11

标签: jquery json

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

处理数据集时,函数调用自身并获取接下来的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);
}

通过一些警报显示正确的数据集,但没有它们只显示数据集中的最后一个或第一个数据。有人可以帮我吗?!

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

2 个答案:

答案 0 :(得分: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);

          });
    }

答案 1 :(得分: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();
       }
   }); 
}