Dessinez un fichier Chart.js avec des données ajax et réactif. Quelques problèmes et questions
Je suis en utilisant Chart.js (http://www.chartjs.org/docs/) pour la cartographie.
J'ai besoin d'obtenir les données à partir d'une requête Ajax, et le diagramme d'être réactif.
Dans mon code HTML, j'ai ajouté une toile comme suit:
<div>
<canvas id="userscreated" class="plot" data-url="/stats/userscreated"></canvas>
</div>
Et dans mon javascript (JQuery) code j'ai:
var data2;
$.ajax({
url: $('#userscreated').data('url'),
async: true,
dataType: 'json',
type: "get",
}).done(function (data) {
data2 = data;
//Draw chart
var context = $('#userscreated').get(0).getContext("2d");
var wrapper = $('#userscreated').parent();
var width = $('#userscreated').attr('width', $(wrapper).width());
new Chart(context).Line(
{
labels: data.Dates,
datasets: [
{ fillColor: #404040, data: data.Users }
]
},
{ animation: false }
);
});
//Redraw the chart with the same data
$(window).resize(function () {
var context = $('#userscreated').get(0).getContext("2d");
var wrapper = $('#userscreated').parent();
var width = $('#userscreated').attr('width', $(wrapper).width());
new Chart(context).Line(
{
labels: data2.Dates,
datasets: [
{ fillColor: #404040, data: data2.Users }
]
},
{ animation: false }
);
});
PROBLÈMES
- Le graphique n'est pas en cours de redimensionnement de la fenêtre de redimensionnement.
- Est-il mieux de code pour faire cela? Je pense que je suis en répétant à beaucoup de code.
- Dans Google le dessin est rapide. Dans firefox, parfois il se bloque pendant un certain temps.
Est quelque chose de mal avec mon code? - La demande doit être asynchrone ou pas?
Merci,
Miguel
source d'informationauteur Miguel Moura
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire async appels AJAX pas de problème. Il est juste important que vous configurez le graphique seulement après le succès de rappel des feux. Sinon, vous aurez des problèmes avec votre toile contexte n'est pas définie. Le premier appel à respondCanvas occupe de la configuration initiale, tandis que les autres ne le redimensionnement.
Voici ce qui fonctionne pour moi:
Si vous souhaitez insérer un petit délai entre les appels, vous pouvez utiliser un timeout:
Le retard rendre votre redimensionnement plus réactif dans le cas où vous avez un grand jeu de données sur votre graphique.
vous pouvez définir que dans chart.js
Le code: