2017-02-14 1 views
0

Кажется, я пытаюсь отобразить диаграмму, хотя я правильно передал все свои данные как json_encode. Что я могу делать неправильно. Ниже код дает мне ошибкуГрафики js и laravel: отобразить диаграмму после прохождения в json-данных

Uncaught SyntaxError: Unexpected token { on line data: {{json_encode($revenue)}},

// Контроллер

public function chartjs() 
{  
    $revenue = Invoice::all()->pluck('amount')->tojson(); 
    return view('home') 
     ->with('revenue',json_encode($revenue)); 
} 

// лезвие вид

<script> 
(function() { 
    var ctx = document.getElementById('canvas').getContext('2d'); 
     var year = ['2013','2014','2015', '2016']; 
    var chart = { 
     labels: year, 
     datasets: [{ 
      data: @{{json_encode($revenue)}}, 
      fillColor : "#94646D", 
      strokeColor : "#A37079", 
      pointColor : "#BC808B", 
      showTooltips: true, 
      responsive: false 
     }] 
    }; 

    new Chart(ctx).Line(chart); 
})(); 

<div class="container"> 
<div class="row"> 
    <div class="col-md-10 col-md-offset-1"> 
     <div class="panel panel-default"> 
      <div class="panel-heading">Dashboard</div> 
      <div class="panel-body"> 
       <canvas id="canvas" height="280" width="600"></canvas> 
      </div> 
     </div> 
    </div> 
</div> 

ответ

1

Кажется, вы делаете json_encode() дважды. В контроллере и в скриптах. Вызов json_encode() в контроллере, а затем в скрипте сделать

data: {{ $revenue }}, 

Или

data: <?php echo $revenue; ?>, 

$revenue не определен, потому что вы передаёте переменную сеанса с помощью with(). Вместо того, чтобы вернуть его на ваш взгляд, как это:

$revenue = Invoice::all()->pluck('amount')->tojson(); 
return view('home', compact('revenue')); //'revenue' will match $revenue 
+0

Я внедрил данные: , как указано выше, но теперь получение «дохода» как неопределенной переменной ... –

+0

О да, потому что вы устанавливаете '$ income' в качестве переменной сеанса. Проверьте мои обновления. – EddyTheDove

+0

Спасибо. Сейчас это работает. –

1

Я не знаю, о графике вещи, но вы кодирующая ваши данные в 3 раза !!!

public function chartjs() 
{  
    $revenue = Invoice::all()->pluck('amount')->toJson(); 
    // $revenue is already a json string 
    return view('home') 
     ->with('revenue',$revenue); // you don't need this json_encode 
} 

Также, на ваш взгляд, вам не нужен json_encode. Вам также может потребоваться ввести строку json внутри цитаты.

data: @'{{$revenue}}', 
+0

Я реализовал как выше, но теперь получаю «доход» как неопределенную переменную ... –

1

Похоже, вы вызываете json_encode более одного раза. Tojson() должно быть достаточно.

Ваше возвращение может быть, как это

return view('home', [ 'revenue' => $revenue ]); 

А затем распечатать его на JavaScript, как это:

data: {!! $revenue !!} 

Также проверьте, если структура данных печатается в исходном HTML код эквивалентен одному требуемый библиотекой диаграмм.

Смежные вопросы