2016-08-22 1 views
1

Je crée un graphique à l'aide de Rickshaw JS. Pour ce faire, j'ai créé une fonction qui, lorsqu'elle est appelée, rend le graphique. Le problème auquel je suis confronté est lorsqu'il est appelé dans les balises de script, la fonction rend tout bien, comme je l'attends. Cependant, lorsqu'ils sont appelés depuis la fonction de succès d'un appel AJAX, les axes n'apparaissent pas.Problème de rendu de l'axe Rickshaw JS lorsqu'il est appelé dans la fonction de réussite AJAX

extrait de code pertinent:

<script> 
function ProbabilityPlot(a) { 
    var graph = new Rickshaw.Graph({ 
     ... 
    }); 
    graph.render(); 

    var xAxis = new Rickshaw.Graph.Axis.X({ 
     ... 
    }); 
    xAxis.render(); 

    var yAxis = new Rickshaw.Graph.Axis.Y({ 
     ... 
    }); 
    yAxis.render(); 
}; 

$.ajax({ 
    url: plotURl, 
    dataType: 'json', 
    cache: false, 
    success: function(data) { 
     ProbabilityPlot([ {{plot_data}} ]); <-- axes do NOT work 
    } 
}); 

ProbabilityPlot([ {{plot_data}} ]); <-- eveything works perfectly 
</script> 

Je peux vérifier que les paramètres transmis sur la fonction sont les mêmes dans les deux cas.

+0

Quel est le point de '.bind (this)' dans votre code? Il n'y a rien que vous liez vos fonctions de rappel. De plus, vos accolades ne sont pas assorties. Corrigez l'indentation de votre code, faites correspondre vos accolades et expliquez ce que vous attendez de ceci dans vos rappels. – Tomalak

+0

Actuellement, j'obtiens des données statiques qui sont représentées par _ {{plot_data}} _. Maintenant je passe à AJAX pour obtenir des données asynchrones. J'utilisais bind (this) pour attacher cette fonction à un élément DOM de graphe que je crée. J'ai mis à jour le code dans la question plus loin. – Shubham

+0

J'ai supprimé _bind (this) _ de l'extrait d'origine car je pense que ce n'est pas pertinent pour le problème auquel je suis confronté. – Shubham

Répondre

0

Vous ne savez pas comment il a été réparé ou quel est le problème sous-jacent, mais le correctif (au moins pour l'instant) consistait à déplacer les scripts vers la tête du code HTML.

<script src="{% static "Home/js/vendor/jquery.js" %}"></script> 
<script src="http://code.shutterstock.com/rickshaw/vendor/d3.v3.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.15/jquery-ui.min.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/rickshaw/1.5.1/rickshaw.min.js"></script> 
+1

Ensuite, le correctif consiste à placer votre section JS personnalisée dans '$ (document) .ready (function() {/ * ... * /});' - ou, pour simplifier: '$ (function() {/ * ... * /}); ' – Tomalak

+0

Parfait merci !! Quelque part raté .. va ajouter le chèque à l'avenir .. merci encore! – Shubham

+0

Avec cela, vous pouvez déplacer vos bibliothèques à la fin du document, bien sûr. – Tomalak