2017-07-21 3 views
1

Ich habe jQuery Autorefresh mit AJAX und JSON.jQuery AJAX JSON Autorefresh Anzeige Daten mit Animation funktioniert nicht

setInterval(function() 
    { 
     $.ajax(
     { 
      url: "d1", 
      type: "POST", 
      dataType: "JSON", 
      success: function (jsonStr) 
      { 
       var n = jsonStr.length; 
       var html = "<ul class='table2'>"; 

       for(var x = 0; x < n; x++) 
       { 
        //alert(jsonStr[x].badgeID); 
        html += "<li><div class='td' style='width: 10%; text-align: center; border-right: 3px solid #455f51;'>" + jsonStr[x].badgeID + "</div><div class='td' style='width: 40%; border-right: 3px solid #455f51;'>" + jsonStr[x].employeeName + "</div></li>" ; 
       } 

       $("#d1").html(html); 
      } 
     }); 
    }, 3000); 

Diese Funktion wird die Daten zu id # d1

sein anzeigen Und jetzt habe ich jQuery Animation, wenn die Daten sehen sein.

Wenn die Seite geladen ist, werden die Daten nicht angezeigt (die Daten werden mit dieser Animation angezeigt).

Beispiel Animation, die Sie zu diesem fiddle

HTML

<div id="d1"></div> 
+0

Nun auf Dokument laden, haben Sie nichts in Ihrem div ... so kann nichts animiert werden. Sie möchten, dass die Animation in jedem Intervall gestartet wird? Alle 3 Sekunden? –

+0

Ja, weil die Daten von Ajax jSon stammen. Also nach dem Laden von Ajax jSon dann animieren Sie es. Wenn neue Daten hinzugefügt werden, wird es automatisch hinzugefügt. Ist es möglich? Es bedeutet automatische Aktualisierung, die Animation verwendet, um die Daten zu zeigen, wenn es neue Daten gibt, folgt es der Animation –

Antwort

0

Sie müssen nur Ihren FadeList nach jedem Ajax-load, nicht auf dem Dokument laden sehen. Hier entfernte ich die Ajax-Teil, aber das ist das gleiche:

function getList() 
 
    { 
 
    var jsonStr = [0,1,2,3,4] ; 
 

 
    var ul = jQuery('<ul></ul>') ; 
 
    jQuery(jsonStr).each(function(k,v) { 
 
     ul.append('<li>'+v+'</li>') ; 
 
    }) ; 
 
    $("#d1").append(ul); 
 

 
    ul.find('li').css({ 
 
     'opacity':0, 
 
     'left':'100%', 
 
    }).each(function(){ 
 
     // For each "li" in your new UL, animate them from right to left. 
 
     // To make them animate 1 by 1, you don't need to have a timeout or a callback : 
 
     // .index() tells you wich li it is (first, second...) in your loop, so you can just animate at 200*index and they will animate from 0 to each 200ms. 
 
     jQuery(this).animate({ 
 
     'opacity':1, 
 
     'left':0, 
 
     },200*jQuery(this).index()) ; 
 
    }) ; 
 
} 
 

 
jQuery(document).on('ready',function(){ 
 
    getList() ; // Call your getList on load 
 
}) ; 
 

 
// Call your getList each 3 seconds 
 
setInterval(getList, 3000) ;
ul{list-style:none; position:relative ; overflow:hidden; } 
 
ul>li { position:relative ;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="d1"></div>

+0

Hallo Pierre, danke für deine Antwort. Getestet habe ich es aber jetzt, wenn ich neue Daten anlege, wird es nicht angezeigt (es werden nur 2 Daten angezeigt), ich denke du weißt es liegt an der Intervallzeit. Was ich will, wenn neue Daten hinzugefügt werden, so zeigen die Daten, wie viel es hinzugefügt hat. Bitte um Rat. –

+0

Sie möchten vorherige Daten behalten und alle 3 Sekunden am Ende neue Daten hinzufügen? –

+0

Wissen Sie, die Ajax-Funktion wird nach 2 Sekunden aktualisiert. Es wird also immer die Funktion durchlaufen, deshalb können keine anderen Daten angezeigt werden. Irgendeine Idee? –