jquery - Order of function execution in javascript -
this question has answer here:
i making java script application having html canvas element. clicking on canvas triggers java script event. order of execution of function not expected
$('#canvas1').on('click',function(e){ get_json_data(); //plot json data show_curve(); }); function get_json_data(){ $.getjson("program/heatmap_slices.json",function(data){ console.log("function1"); visibilty = data['photo'][1][1]; }); return ; } function show_curve(){ $("#canvas2").show(); console.log("function2"); var canvas2 = document.getelementbyid('canvas2'); var ctx2 = canvas2.getcontext("2d"); var mynewchart = new chart(ctx2); var data = { labels: points, datasets: [ { label: "my first dataset", fillcolor: "rgba(175,175,220,0.5)", strokecolor: "rgba(150,150,220,1)", highlightfill: "rgba(100,100,220,0.75)", highlightstroke: "rgba(220,220,220,1)", data: visibilty, } ] }; var options = { barstrokewidth : 2, } var mybarchart = new chart(ctx2).bar(data,options); points =[]; return; } i expect order of console log should "function1 followed function2" other way round. if remove $getjson method, execution order comes expected.
the problem in get_json_data() method call $.getjson() asyncronous method: executes json call , when data arrives, calls callback function. happens that:
- you call
get_json_data(), calls$.getjson(), takes while - you call
show_curve(), prints"function2" - the
$.getjson()gets data, calls callback , print"function1".
to solve problem have waits $.getjson() ends before call show_curve(). that, can modify signature of get_json_data() accept callback function call when $.getjson() ends:
function get_json_data(callback){ // <-- callback $.getjson("program/heatmap_slices.json",function(data){ console.log("function1"); visibilty = data['photo'][1][1]; callback(); // <-- call inside '$.getjson' callback }); return ; } the have modify intial call in way:
$('#canvas1').on('click',function(e){ get_json_data(function() { //plot json data show_curve(); }); }); so show_curve() call after get_json_data() ends.
here post code che changes:
$('#canvas1').on('click',function(e){ get_json_data(function() { //plot json data show_curve(); }); }); function get_json_data(callback){ $.getjson("program/heatmap_slices.json",function(data){ console.log("function1"); visibilty = data['photo'][1][1]; callback(); }); return ; } function show_curve(){ $("#canvas2").show(); console.log("function2"); var canvas2 = document.getelementbyid('canvas2'); var ctx2 = canvas2.getcontext("2d"); var mynewchart = new chart(ctx2); var data = { labels: points, datasets: [ { label: "my first dataset", fillcolor: "rgba(175,175,220,0.5)", strokecolor: "rgba(150,150,220,1)", highlightfill: "rgba(100,100,220,0.75)", highlightstroke: "rgba(220,220,220,1)", data: visibilty, } ] }; var options = { barstrokewidth : 2, } var mybarchart = new chart(ctx2).bar(data,options); points =[]; return; }
Comments
Post a Comment