2016-07-09 5 views
0

Ich versuche, einige formatierte Zeichenfolge von PHP nach jQuery zu übergeben. Aber ich bin immer einen Fehler alsPassing Decimal String von PHP zu Jquery

VM2203:3 Uncaught SyntaxError: Unexpected number in the browser.

Hier ist mein Code

<?php 
$OSlist = []; 
$category = ""; 
$pieData = ""; 
$curl = curl_init(); 

curl_setopt_array($curl, array(
CURLOPT_PORT => "8081", 
CURLOPT_URL => "http://localhost:8081/api/devices/hoursBy/OSVersion", 
CURLOPT_RETURNTRANSFER => true, 
CURLOPT_ENCODING => "", 
CURLOPT_MAXREDIRS => 10, 
CURLOPT_TIMEOUT => 30, 
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, 
CURLOPT_CUSTOMREQUEST => "GET", 
CURLOPT_HTTPHEADER => array(
    "cache-control: no-cache", 
), 
)); 

$response = curl_exec($curl); 
$err = curl_error($curl); 

curl_close($curl); 

if ($err) { 
echo "cURL Error #:" . $err; 
} else { 
$decodeStr = json_decode($response, true); 
foreach ($decodeStr as $item) { 
    $os = $item['_id']['os']; 
    if ($os == $selectedOS) { 
     if ($item['total_hours'] != 0) { 
      $OSlist[$item['_id']['version']] = $item['total_hours']; 
      // echo 'iOS'.$item['_id']['version'] . '&nbsp;:&nbsp;' . $item['total_hours'] ,"<br>"; 
     } 
    } 
} 
ksort($OSlist); 
foreach ($OSlist as $key => $val) { 
    // echo "$key = $val" . "<br>"; 
    $category = $category . $key . ","; 
    $pieData = $pieData . "[" . $key . "," . $val . "],"; 
} 
$pieData="[".$pieData."]"; 
echo $pieData; 
// print_r($OSlist); 
} ?> 
<script > 
     $('document').ready(function() { 
      var jsArray = <?php echo $pieData; ?>; 
      alert(jsArray); 

     }); 


    </script> 

Die Piedata Ausgang ist

[[2.3.4,97.9],[4.0.3,11.6],[4.0.4,2.4],[4.1.1,15.1],[4.1.2,398.4],[4.2.1,45.8],[4.2.2,27.3],[4.3,321],[4.4.2,694.9],[4.4.4,478.7],[5,646.3],[5.0.1,177.5],[5.0.2,1210.5],[5.1,126.2],[5.1.1,524.4],[6,201.5],] 

ich brauche eigentlich diese Daten zu übergeben Kreisdiagramm auf die Daten highchart Das folgende Diagramm gilt für die mobile Version im Vergleich zu den Nutzungszeiten.

function loadPieGraph() { 
      // Radialize the colors 
      var android = <?php echo $androidhrs ?>; 
      var ios = <?php echo $ioshrs ?>; 
      var obj = [{ 
        type: 'pie', 
        name: 'Browser share', 
        data: [ 
         ['4.1', '23.0'], 
         { 
          name: '5.0', 
          y: '40.2', 
          sliced: true, 
          selected: true 
         }, 
        ] 
       }]; 
      Highcharts.getOptions().colors = Highcharts.map(Highcharts.getOptions().colors, function (color) { 
       return { 
        radialGradient: { 
         cx: 0.5, 
         cy: 0.3, 
         r: 0.7 
        }, 
        stops: [ 
         [0, color], 
         [1, Highcharts.Color(color).brighten(-0.3).get('rgb')] // darken 
        ] 
       }; 
      }); 

      // Build the chart 
      $('#container').highcharts({ 
       chart: { 
        plotBackgroundColor: null, 
        plotBorderWidth: null, 
        plotShadow: false, 
        type: 'pie' 
       }, 
       title: { 
        text: 'Browser market shares. January, 2015 to May, 2015' 
       }, 
       tooltip: { 
        pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>' 
       }, 
       plotOptions: { 
        pie: { 
         allowPointSelect: true, 
         cursor: 'pointer', 
         dataLabels: { 
          enabled: true, 
          format: '<b>{point.name}</b>: {point.percentage:.1f} %', 
          style: { 
           color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black' 
          }, 
          connectorColor: 'silver' 
         } 
        } 
       }, 
       series: obj 
      }); 


     } 
+2

Warum verwenden Sie nicht json_encode()? – Robert

+0

Das würde viele Ajax-Probleme lösen – 25r43q

Antwort

1

Dieser ganze Teil:

foreach ($OSlist as $key => $val) { 
    // echo "$key = $val" . "<br>"; 
    $category = $category . $key . ","; 
    $pieData = $pieData . "[" . $key . "," . $val . "],"; 
} 
$pieData="[".$pieData."]"; 
echo $pieData; 
// print_r($OSlist); 
} ?> 
<script > 
     $('document').ready(function() { 
      var jsArray = <?php echo $pieData; ?>; 
      alert(jsArray); 

     }); 


    </script> 

sieht in der Natur wirklich defekt.

Sie sollten eher:

$pieData = json_encode($OSlist); 

und im Skript-Tag Sie dies einfach tun können:

jsArray = JSON.parse("<?php echo $pieData; ?>"); 

Und dann tun die HighChart relevanten Array in der JS-Formatierung. Oder Sie können direkt die Formatierung zuerst in PHP tun und json kodieren Sie das endgültige Formular und übergeben Sie es direkt an js, wo Sie wieder JSON.parse sie wieder benötigen.

Führen Sie in diesen Fällen immer Datentransaktionen in Form von JSON durch.

Ich hoffe, es hilft.

Ich hoffe, es hilft.

+0

var jsArray = JSON.parse (); Warnung (jsArray); – user2350138

+0

zeigt nichts an – user2350138

+0

versuche dies: var jsArray = JSON.parse (""); Und in der Konsole sehen, welcher Fehler es sagt. –