2017-07-01 5 views
0

Ich habe eine Datentabelle, der ich Zeilen anhängen möchte, wenn neue Daten angezeigt werden sollen. Ich bin relativ unerfahren, also nahm ich den einfachen Ausweg und wollte ein Skript schreiben, das die Datenbank jede Sekunde auf Updates prüft, anstatt auf Server-gesendete Ereignisse zu warten. Ich habe versucht, eine Ajax-Abfrage zu schreiben, die alle Objekte in der Datentabelle abrufen würde, und wenn ihr sechster Wert falsch ist (was bedeutet, dass sie nicht geladen wurden), würde sie eine Zeile zu meiner Datentabelle mit dieser Information hinzufügen. Meine Tabellen sind in einem Django Webapp, und hier ist der Code, den ich versucht habe zu implementieren:Tabelle mit Ajax aktualisieren

<script type="text/javascript"> 
     $(document).ready(function(){ 
      var table = $('#example').DataTable(); 
      setInterval(function(){ 
      newrequests = $.ajax({ 
       type: "GET", 
       url: "/main/newrequests/", 

       // I tried this and it didn't work 

       // success: function(data) { 
       //  for(i = 0; i < data.length; i++){ 
       //  // check if the request has been loaded 
       //  if(data[i][5] == 0) 
       //   // if not, load and set to loaded 
       //   table.row.add(data[i]).draw; 
       //   data[i][5] == 1; 
       //  } 
       // } 
      }); 

      for(i=0; i<newrequests.length; i++){ 
       if (newrequests[i][5] == 0){ 
       table.row.add(newrequests[i]).draw(); 
       newrequests[i][5] = 1; 
       } 
      } 

      }, 1000) 
     }); 
</script> 

ich einen Blick haben für/main/newrequests eingerichtet, die einfach alle Objekte in der Datenbank:

def newrequests(request): 
    return HttpResponse(Request.objects.all()) 

Wenn ich die Datenbank aktualisiere, wird die Datentabelle nicht aktualisiert. Weiß jemand was ich falsch mache? Ich habe das Gefühl, dass ich versuche, Ajax zu benutzen.

Antwort

0

Datentabelle hat bereits eine Option für das:

var table = $('#example').DataTable({ 
    "ajax": '/main/newrequests' 
}); 

setInterval(function() { 
    table.ajax.reload(); 
}, 30000); 

https://datatables.net/examples/data_sources/ajax.html https://datatables.net/reference/api/ajax.reload()

+0

Ich wusste nicht, Tables diese Funktion hatte - dank. Wenn ich versuche, es zu implementieren, gibt es einen Fehler HTTP 500. Ich schaute ein paar weitere Tutorials online und meine Ansicht für die Seite, auf die Ajax verwiesen wird, ist: def newrequests (Anfrage): Anfragen = Request.objects.all() data = json.dumps (Anfragen) return HttpResponse (Daten, content_type = 'application/json') Wissen Sie, warum dies einen Fehler zurückgibt, anstatt die Tabelle neu zu laden? – hackerman

Verwandte Themen