2014-02-19 5 views
0

Привет, У меня есть хорошее опыт работы с javascript, и я застрял в следующей ситуации.
Я разрабатываю страницу PHP для отображения некоторых значений в графе. Я использую morris.js.

Теперь, как morris.js использует массив в следующем формате для отображения в виде графика:
Передать переменные php в morris.js

// AREA CHART 
      var area = new Morris.Area({ 
       element: 'revenue-chart', 
       resize: true, 
       data: [ 
        {y: '2011', purchase: 500, sale: 1000, profit: 500}, 
        {y: '2012', purchase: 600, sale: 1100, profit: 500}, 
        {y: '2013', purchase: 500, sale: 1050, profit: 550} 
       ], 
       xkey: 'y', 
       ykeys: ['profit', 'purchase', 'sale'], 
       labels: ['Profit', 'Purchase', 'Sale'], 
       lineColors: ['#a0d0e0', '#3c8dbc', '#ac5bc3'], 
       hideHover: 'auto' 
      }); 

Но у меня есть эти значения в переменной PHP, как:

$year1 = '2011'; 
$sale1 = '1000'; 
$purchase1 = '500'; 
$profit1 = '500'; 

$year2 = '2012'; 
$sale2 = '1200'; 
$purchase2 = '600'; 
$profit2 = '500'; 

$year3 = '2013'; 
$sale3 = '1050'; 
$purchase3 = '500'; 
$profit3 = '550'; 

Как я могу передать те php до js. Я попробовал json_encode(), но это не помогло мне.

ОБНОВЛЕНИЕ: Отображение обновленного кода с ответом Люка Cordingley, все еще имеет проблемы с ним.

 <script type="text/javascript"> 
     window.MyProjectNamespace.phpVars = <? 
       $phpVars = array('year' => '2011', 'purchase' => '1000', 'sale' => '600', 'profit' => '400'); 
       echo json_encode($phpVars); 
       ?> 
    </script> 

    <script type="text/javascript"> 
     $(function() { 

      // AREA CHART 
      var area = new Morris.Area({ 
       element: 'revenue-chart', 
       resize: true, 
       data: [ 
        {y: window.MyProjectNamespace.phpVars.year, purchase: "500", sale: "1000", profit: "500"}, 
        {y: "2012", purchase: "600", sale: "1100", profit: "500"}, 
        {y: "2013", purchase: "500", sale: "1050", profit: "550"} 
       ], 
       xkey: 'y', 
       ykeys: ['profit', 'purchase', 'sale'], 
       labels: ['Profit', 'Purchase', 'Sale'], 
       lineColors: ['#a0d0e0', '#3c8dbc', '#000000'], 
       hideHover: 'auto' 
      }); 
    }); 

ответ

1

Вам необходимо динамически сгенерировать JavaScript или, как я предпочитаю, создать объект JavaScript, который соответствует моим PHP переменных. После того, как вы получите PHP vars в JavaScript, просто передайте их любым методам JavaScript по мере необходимости. Вот пример того, как получить ваши PHP переменные в JavaScript:

<script type="text/javascript"> 
    $(function() { 
     window.MyProjectNamespace = {}; 
     window.MyProjectNamespace.phpVars = <?php 
      $phpVars = array('year' => '2011', 'purchase' => '1000', 'sale' => '600', 'profit' => '400'); 
      echo json_encode($phpVars); 
      ?>; 

     // AREA CHART 
     var area = new Morris.Area({ 
      element: 'revenue-chart', 
      resize: true, 
      data: [ 
       {y: window.MyProjectNamespace.phpVars.year, purchase: "500", sale: "1000", profit: "500"}, 
       {y: "2012", purchase: "600", sale: "1100", profit: "500"}, 
       {y: "2013", purchase: "500", sale: "1050", profit: "550"} 
      ], 
      xkey: 'y', 
      ykeys: ['profit', 'purchase', 'sale'], 
      labels: ['Profit', 'Purchase', 'Sale'], 
      lineColors: ['#a0d0e0', '#3c8dbc', '#000000'], 
      hideHover: 'auto' 
     }); 
    }); 
</script> 
+0

и может пожалуйста xplain где 'console.log (window.MyProjectNamespace.phpVars),' должен быть вставлен. Я попытался заменить 'data: [......]' в приведенном выше коде 'data: [console.log (window.MyProjectNamespace.phpVars);]', но не работал таким образом. – sohal07

+0

console.log - это просто функция отладки, которая показывает вам то, что содержится в определенной переменной. Например, если у вас есть 'json_encode (array ('one' => 1, 'two' => 2));' в PHP, который создаст стандартный объект JavaScript, например '{'one': 1, 'two': 2 } '. Поэтому, если вы хотите поместить все ваши PHP-переменные в JavaScript, используя мой пример, вы можете получить доступ к значению переменной 'one' as: 'window.MyProjectNamespace.phpVars.one'. Значение этой переменной будет «1». Вы можете передать необходимые переменные методу Morris.Area, как только они появятся в JavaScript, как показано: –

+0

Привет, Лука, я только что обновил свой вопрос с применением вашего ответа, все еще есть некоторые проблемы с ним. Pls посмотрел. – sohal07

0

Вы должны использовать Ajax в вашем JavaScript для получения переменных из стороны сервера.

если вы используете JQuery:

$.ajax({ 
    type  : "POST", 
    url  : "get_my_Variable.php", 
    dataType: "json", 
    data  : {hello:'i`m'}, 
    success : function(msg) { 
     // here u get your variables 
    }, 
    complete : function(r) { 
    }, 
    error: function(error) { 
    } 
}); 

в стороне сервера:

if(isset($_POST['hello'])){ 
    echo json_encode($myVariables); 
} 
Смежные вопросы