2016-08-22 1 views
1

Я создаю график, используя Rickshaw JS. Для этого я создал функцию, которая при вызове отображает график. Проблема, с которой я столкнулся, - это когда вы вызываете внутри тегов скрипта, функция делает все отлично, как я ожидаю. Однако при вызове из функции успеха вызова AJAX оси не отображаются.Ошибка рендеринга оси Rixshaw JS при вызове в функции успеха AJAX

Соответствующий фрагмент кода:

<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> 

я могу убедиться, что параметры, передаваемые на функции одинаковы в обоих случаях.

+0

В чем смысл '.bind (this)' в вашем коде? Вы ничего не связываете функциями обратного вызова. Также ваши скобки не совпадают. Исправьте отступ вашего кода, сопоставьте свои фигурные скобки и объясните, что вы ожидаете от «этого» в ваших обратных вызовах. – Tomalak

+0

В настоящее время я получаю статические данные, которые представлены _ {{plot_data}} _. Теперь я перехожу на AJAX для получения асинхронных данных. Я использовал bind (this) для присоединения этой функции к элементу DOM диаграммы, который я создаю. Я обновил код в вопросе дальше. – Shubham

+0

Я удалил _bind (this) _ из исходного фрагмента, поскольку я чувствую, что это не имеет отношения к проблеме, с которой я столкнулся. – Shubham

ответ

0

Не уверен, как он был исправлен или что является основной проблемой, но исправление (по крайней мере на данный момент) должно было переместить скрипты в голову 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

Затем исправление должно заключить ваш пользовательский раздел JS в '$ (document) .ready (function() {/ * ... * /});' - или, для краткости: '$ (function() {/ * ... * /}); ' – Tomalak

+0

Прекрасное спасибо! Как-то пропустил его .. добавит чек в будущее .. еще раз спасибо! – Shubham

+0

С этим вы можете, конечно, переместить свои библиотеки в конец документа. – Tomalak

Смежные вопросы