Du skal dele din logik op. Jeg ville fx omdøbe din funktion "drawChart" til noget andet, mere sigende fx: "beginDrawChart". Herefter ville min callchain se sådan her ud:
beginDrawChart() -> getJSONData() -> drawChart(data);
Du kalder altså selve "tegne" funktionen, der benytter din data, fra callback'et i getJSONData metoden:
- function beginDrawChart() { // 1. beginDrawChart()
- $.ajax('/jsondata', {
- success: function(data) { // 2. "getJSONData" callback funktion
- drawChart(data); // 3. drawChart - Her tegner du dit chart, med de hentede data
- }
- });
- }
Et problem du kan støde ind i er meget dybe "nested call trees", i det du nogen gange vil opleve en hulens masse callback funktioner inden i hinanden. Der er dog mange måder at løse dette på, og de er blot en Google søgning væk.
edit: PS:
Det er generelt best-practice kodestil, at navngive normale funktioner med camelCase (altså lille start bogstav). Normalt forbeholder man funktioner med stort begyndelsesbogstav til "class" constructorer.
Tak Jakob
Mit problem er at jeg bruger Google charts i denne forbindelse.
Det eksempel jeg har bygget videre på har en ren scripts blok uden metode til at initialisere tegningen af dette chart, og i denne forbindelse jeg så skal kalde mit jQuery AJAX for at få data til at kunne bruge for at kunne fylde data i rigtigt format ind for så at tegne mit chart.
Se gerne mere her:
http://jsfiddle.net/WedEF/4/Som du kan se så er data nu indskrevet i javascriptet, men skal have det lavet således at jeg kan modtage mine JSON data (fra jQuery AJAX kald) til at lave samme trick - bare dynamisk med de hentede data.
Jeg er klar over at der findes masser af løsninger derude, men der findes også enormt mange forkerte og dårlige som jeg lidt håbede på i ville kunne skære igennem.
Jeg har intet imod at Google og læse, men et fingerpeg om retning hjælper lidt så jeg ikke bare læser 7 forskellige måder og tænker ja de er smarte så må jeg bare prøve dem alle sammen af før jeg forstår hvad der er smart og dumt ved hver og håbe på jeg rammer alt det dumme i mine forsøg
Der er enormt kloge folk herinde som jeg håbede på kunne give lidt ide om hvad jeg skal søge efter eller forklare lidt hvad er godt / skidt og hvorfor den ene metode at gøre tingene på er bedre end en anden.
Man kan faktisk chain det med deferred ... det er lidt kompliceret, men super sejt
- function init () {
- getData("/getJsonData/")
- .done(drawChart)
- .fail(failed);
- }
-
- function failed() {
- console.log("b0rked the get data");
- }
-
- function drawChart(data) {
- console.log("drawChart");
- }
-
- function getData (url) {
- return $.ajax({
- type: "get",
- url: url,
- dataType: 'json',
- timeout: 2000
- });
- }
Kan du eller nogle af de andre hjælpe med at forklare defered? At man kan sætte metoder i forlængelse af hinanden?
Indlæg senest redigeret d. 08.11.2012 13:13 af Bruger #17215