Pourquoi disparaître ma carte Dojo Pie quand je l'appelle updateSeries après un appel Ajax?
-
30-09-2019 - |
Question
Je suis en train de mettre à jour un dojo graphique circulaire en utilisant la méthode updateSeries. Je invoque la méthode après avoir effectué un appel ajax pour obtenir des données de tableau javascript mises à jour.
Voici le Javascript:
var eventByReasonsData = .... //gets populated on jsp page compile
var theme = dojox.charting.themes.Julie;
var eventReasonsChart = null;
function makeEventsByReason() {
var dc = dojox.charting;
eventReasonsChart = new dc.Chart2D("eventsByReasonChart");
eventReasonsChart.setTheme( theme ).addPlot("default", {
type: "Pie",
font: "normal normal 8pt Tahoma",
fontColor: "black",
labelOffset: -20,
radius: 100
}).addSeries("eventSeries", eventByReasonsData );
var anim_a = new dc.action2d.MoveSlice(eventReasonsChart, "default");
var anim_b = new dc.action2d.Highlight(eventReasonsChart, "default");
var anim_c = new dc.action2d.Tooltip(eventReasonsChart, "default");
eventReasonsChart.render();
}
Voici mon code HTML:
<div id="eventsByReasonChart" ></div>
est le javascript ici faire l'appel AJAX:
new Ajax.Request( url, {
method: 'post',
parameters: params,
onComplete: function(response) {
if( response.responseText != "empty" )
{
var chart = eventReasonsChart;
eventByReasonsData = response.responseText;
chart.updateSeries( "eventSeries", eventByReasonsData );
chart.render();
}
}
});
Enfin, voici comment mes données sont formatées lors de l'émission au tableau:
[{ y:48 },{ y:1 },{ y:1 },{ y:14 },{ y:7 },{ y:3 },{ y:8 }]
Lorsque le tableau est d'abord dessiné, tout est cool, pas de problème. Après avoir fait l'appel Ajax, je reçois les nouvelles données, l'appel de mise à jour est faite et le graphique disparait. Aucune erreur que je peux voir sur la console.
toutes les idées?
La solution
Je soupçonne que eventByReasonsData
est une chaîne, lorsque updateSeries()
attend un tableau. Vous pouvez utiliser dojo.fromJson()
pour convertir la chaîne en un tableau:
chart.updateSeries( "eventSeries", dojo.fromJson(eventByReasonsData) );