2016-08-22 12 views
1

Rickshaw JSを使用してグラフを作成しています。これを行うには、呼び出されたときグラフをレンダリングする関数を作成しました。 私が直面している問題は、スクリプトタグ内で呼び出されたときに、関数がすべて正常にレンダリングすることです。しかし、AJAX呼び出しの成功関数から呼び出されると、軸は表示されません。Rickshaw AJAX成功関数内で呼び出されたときのJS軸レンダリングの問題

関連するコードスニペット:

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

Iは、関数に渡されたパラメータは、両方の場合で同じであることを検証することができます。

+0

コード内で '.bind(this)'のポイントは何ですか?コールバック関数をバインドするものは何もありません。また、中括弧は一致しません。あなたのコードの字下げを修正し、中括弧にマッチさせ、あなたのコールバックで 'this'が指し示すものを説明してください。 – Tomalak

+0

現在、私は_ {{plot_data}} _によって表される静的データを取得します。今私は非同期データを取得するAJAXに切り替えています。私はこの関数をグラフのDOM要素に結びつけるためにbind(this)を使っていました。質問のコードをさらに更新しました。 – 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(){/ * ... * /});' ... * /}); ' – Tomalak

+0

ありがとうございました!何とかそれを逃した..前方にチェックを追加します..もう一度ありがとう! – Shubham

+0

これで、ライブラリをドキュメントの最後まで移動することができます。 – Tomalak

関連する問題