フォームから JavaScript に値を渡す際の問題を解決しようとしています。
これがコードです。Python スクリプトはシームレスに機能し、フォームの値が毎回文字列を返す場合に使用されます。
<head>
<title>Line Chart</title>
<script>
function clickme() {
putgraph();
}
</script>
<script>
function alertbox() {
alert(ajaxResponse);
}
</script>
<script src="Chart.js"></script>
<script src="jquery.js"></script>
<script>
function drawgraph(z) {
var v = document.getElementById("frmvar");
v.value = z;
return draw();
};
function draw() {
var ajaxResponse=null;
$.ajax({
url: "/currentcost.py",
data: $("form[name='frm']").serialize(),
success: function(response){
ajaxResponse=response;
}, async: false
});
return ajaxResponse;
}
</script>
<script>
function putgraph()
{
tg=drawgraph("t");
alert(tg);
var lineChartData = {
labels : ["January","February","March","April","May","June","July"],
datasets : [
{
fillColor : "rgba(220,220,220,0.5)",
strokeColor : "rgba(220,220,220,1)",
pointColor : "rgba(220,220,220,1)",
pointStrokeColor : "#fff",
data : [tg]
// data : [65,59,90,81,56,55,40]
},
]
}
var myLine = new Chart(document.getElementById("canvas").getContext("2d")).Line(lineChartData);
}
</script>
<meta name = "viewport" content = "initial-scale = 1, user-scalable = no">
<style>
canvas{
}
</style>
</head>
何が起こるかは次のとおりです。
ユーザーがフォームの操作を完了したら、ボタンをクリックしてフォームを送信しますclickme
。上部の機能が実行されます。それはputgraph
うまくいくと思いますが、それは間違っていると思います。
すべての AJAX コールバックが配置されており、すべてをまとめる前に機能しているにもかかわらず、関数が終了する前に開始することを示唆する警告ウィンドウがputgraph
表示されます。"undefined"
putgraph
drawgraph
Javascriptが非同期であることは知っていますが、コールバックハンドラーを使用することで、関数drawgraph
と関数がその問題を「克服」したと思いました。draw
私が間違っていることを見て、それを正しくする方法を提案することをお勧めします。
アップデート:
答えてくれたすべての人に感謝します。上記のスクリプトを、使用した回答で編集しました。async キーワードは、厄介なコールバック手順をすべて排除したため、非常に便利であることがわかりました。HTHは他の誰かです:-)