NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
jAk3r
Člen
Avatar
jAk3r:2.6.2020 17:47

Zdravím,

chtěl sem využít graf od Morris.js a načítání dat z databáze řeším takto.

$(document).ready(function(){
           $.nette.ajax({
               url: {plink Homepage:report},
               method: "GET",
               dataType:'json',
               success: function(data) {
                   console.log(data);
                   new Morris.Line({
                       // ID of the element in which to draw the chart.
                       element: 'reports',
                       // Chart data records -- each entry in this array corresponds to a point on
                       // the chart.
                       data: data,
                       // The name of the data record attribute that contains x-values.
                       xkey: 'day',
                       parseTime: false,
                       // A list of names of data record attributes that contain y-values.
                       ykeys: ['pushups','beers'],
                       // Labels for the ykeys -- will be displayed when you hover over the
                       // chart.
                       labels: ['Výdělek:','Provize:'],
                       lineColors: ['#373651','#e94550']
                   });
               },
               error: function(data) {
                   console.log(data);
               }
           });
       });

ale data mi to nenačítá i když console.log(data); my vrací-->

[{ day: 'Leden', pushups: 5000, beers: 750 }, { day: 'Leden', pushups: 10000, beers: 1500 }, ]

a když tyto data vezmu a hodím je tam na tvrdo

data: [{ day: 'Leden', pushups: 5000, beers: 750 }, { day: 'Leden', pushups: 10000, beers: 1500 }, ],

Tak se mi tam zobrazí. Můžu se zeptat proč?

Zkusil jsem: Normálně si načítám data tak jak do všech různých js i tady mi to vrací data správně ale graf to jakoby nevidí.

Chci docílit: Načíst data do grafu.

Odpovědět
2.6.2020 17:47
Pokud něčeho chceš dosáhnout, musíš si za tím jít.
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:3.6.2020 8:22

Je spravna url?
Nemas data nahodou jako string, jak byva obvykle u ajaxu? Zkus tam pred oba priklady pridat radek alert(typeof data)

data = [{ day: 'Leden', pushups: 5000, beers: 750 }, { day: 'Leden', pushups: 10000, beers: 1500 }, ];
data = "[{ day: 'Leden', pushups: 5000, beers: 750 }, { day: 'Leden', pushups: 10000, beers: 1500 }, ]";
To je uplne nenco jineho.
Editováno 3.6.2020 8:23
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
3.6.2020 8:22
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:3.6.2020 8:26

jeste bych to napsal takto:

var opt; // jako zkratka pro options
opt = {
                       // ID of the element in which to draw the chart.
                       element: 'reports',
                       // Chart data records -- each entry in this array corresponds to a point on
                       // the chart.
                       data: data,
                       // The name of the data record attribute that contains x-values.
                       xkey: 'day',
                       parseTime: false,
                       // A list of names of data record attributes that contain y-values.
                       ykeys: ['pushups','beers'],
                       // Labels for the ykeys -- will be displayed when you hover over the
                       // chart.
                       labels: ['Výdělek:','Provize:'],
                       lineColors: ['#373651','#e94550']
                   };
console.log(opt);
new Morris.Line(opt);
 
Nahoru Odpovědět
3.6.2020 8:26
Avatar
jAk3r
Člen
Avatar
Odpovídá na Peter Mlich
jAk3r:3.6.2020 10:18

Máš pravdu vrací mi to jako string. Jak to mohu změnit?

$chart = '';
      foreach ($reports as $row) {
          $proc = $row['price'] * ( 1 + $procent);
          $prove = $proc - $row['price'];
          $chart .= "{ day: 'Leden', pushups: ".$row['price'].", beers: ".$prove." }, ";
      }
      $chart_data = '['. $chart .']';

      return $this->sendJson($chart_data);
Editováno 3.6.2020 10:21
Nahoru Odpovědět
3.6.2020 10:18
Pokud něčeho chceš dosáhnout, musíš si za tím jít.
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:3.6.2020 13:25

To je ale zrovna cast kodu, ktera to dela dobre. V php to string byt muze, musi.
V js si pridej to typeof a zjisti, zda je to string. A kdyz je, ja to preved na js kod. Bud to evaluj nebo pres json.
https://developer.mozilla.org/…Objects/JSON

let code = '"\u2028\u2029"'
JSON.parse(code)  // evaluates to "\u2028\u2029" in all engines
eval(code)        // throws a SyntaxError in old engines

// JSON.parse(text[, reviver])
// JSON.stringify(value[, replacer[, space]])
 
Nahoru Odpovědět
3.6.2020 13:25
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:3.6.2020 13:31

Mimochodem, to, co mas v php, to neni json. To je php string obecne. Json pouziva spesl funkce, ktere muzou vygenerovat v nekterych pripadech jiny kod.
https://www.php.net/json_encode
https://www.php.net/json_decode

Tam bych to napsal asi takto:

$list = array();
... $list[] = array(
           'day' => 'Leden',
           'pushups' => $row['price'],
           'beers' => $prove
            );
...
$chart_data = json_encode($list);
echo $chart_data;
// netusim, co dela ta funkce sendjson... treba tam musi byt.
 
Nahoru Odpovědět
3.6.2020 13:31
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.