2014-02-06 22 views
0

我使用Highcharts來顯示包含日期/時間和房間溫度的圖表。當添加一行PHP頭('location ...')時,Highcharts不會顯示

用於生成圖表的JavaScript是在用戶將能夠查看的temperature.php文件中,並且JavaScript將從包含SQL查詢的dataSorter.php文件中獲取數據以從MySQL檢索結果圖表來顯示。

Javascript功能來生成temperature.php圖表:

<script type="text/javascript"> 
    $(document).ready(function() { 
     var options = { 
      chart: { 
       renderTo: 'container', 
       type: 'line', 
       marginRight: 130, 
       marginBottom: 50 
      }, 
      title: { 
       text: 'Temperature vs. Time', 
       x: -20 //center 
      }, 
      subtitle: { 
       text: '', 
       x: -20 
      }, 
      xAxis: { 
       categories: [] 
      }, 
      yAxis: { 
       title: { 
        text: 'Degrees Celcius' 
       }, 
       plotLines: [{ 
        value: 0, 
        width: 1, 
        color: '#808080' 
       }] 
      }, 
      tooltip: { 
       formatter: function() { 
         return '<b>'+ this.series.name +'</b><br/>'+ 
         this.x +': '+ this.y; 
       } 
      }, 
      legend: { 
       layout: 'vertical', 
       align: 'right', 
       verticalAlign: 'top', 
       x: -10, 
       y: 100, 
       borderWidth: 0 
      }, 
      series: [] 
     } 

     $.getJSON("dataSorter.php", function(json) { 
      options.xAxis.categories = json[0]['data']; 
      options.series[0] = json[1]; 
      chart = new Highcharts.Chart(options); 
     }); 
    }); 
    </script> 

在這一點上,我已經產生了4下拉含日期在temperature.php名單,迄今爲止,從時間和時間。這將允許用戶選擇他們希望看到圖表生成的範圍。 (例如2014-01-20 00:00:00至2014-01-21 22:00:00)。一個按鈕的onclick將激活功能:

 if(isset($_POST['sort'])){ 
     $from=$_POST['SDate']; 
     $to=$_POST['EDate']; 
     $sTime=$_POST['STime']; 
     $eTime=$_POST['ETime']; 
     $start=$from." ".$sTime; 
     $end=$to." ".$eTime; 

     header('Location: dataSorter.php?start='.$start.'&end='.$end.''); 
     } 
     ?> 
  1. $從=開始日期
  2. $到=結束日期
  3. $ STIME =開始時間
  4. $ ETIME =結束時間
  5. $ start =合併$ from和$ sTime得到開始日期/時間
  6. $ end =合併$到和$ eTime得到結束日期/時間

dataSorter.php具有以下代碼:

<?php 
$con = mysql_connect("localhost","root","password"); 

if (!$con) { 
die('Could not connect: ' . mysql_error()); 
} 

mysql_select_db("scsense", $con); 

if(isset($_GET['start'])){ 
$start = $_GET['start']; 
$end = $_GET['end']; 

$sth = mysql_query("SELECT * FROM scsenseinfo WHERE roomID='501' AND (dateTime BETWEEN '$start' AND '$end') ORDER BY recordID"); 
$rows = array(); 
$rows['name'] = 'DateTime'; 
while($rr = mysql_fetch_assoc($sth)) { 
$rows['data'][] = $rr['dateTime']; 
} 

$sth = mysql_query("SELECT * FROM scsenseinfo WHERE roomID='501' AND (dateTime BETWEEN '$start' AND '$end') ORDER BY recordID"); 
$rows1 = array(); 
$rows1['name'] = 'RoomTemperature'; 
while($r = mysql_fetch_array($sth)) { 
$rows1['data'][] = $r['roomTemp']; 
} 

$result = array(); 
array_push($result,$rows); 
array_push($result,$rows1); 

$help = print json_encode($result, JSON_NUMERIC_CHECK); 

mysql_close($con); 
} 

else{ 

$sth = mysql_query("SELECT * FROM (SELECT * FROM scsenseinfo WHERE roomID='501' ORDER BY recordID DESC LIMIT 5) AS tbl ORDER BY tbl.recordID ASC"); 
$rows = array(); 
$rows['name'] = 'DateTime'; 
while($rr = mysql_fetch_assoc($sth)) { 
$rows['data'][] = $rr['dateTime']; 
} 

$sth = mysql_query("SELECT * FROM (SELECT * FROM scsenseinfo WHERE roomID='501' ORDER BY recordID DESC LIMIT 5) AS tbl ORDER BY tbl.recordID ASC"); 
$rows1 = array(); 
$rows1['name'] = 'RoomTemperature'; 
while($r = mysql_fetch_array($sth)) { 
$rows1['data'][] = $r['roomTemp']; 
} 

$result = array(); 
array_push($result,$rows); 
array_push($result,$rows1); 


$help = print json_encode($result, JSON_NUMERIC_CHECK); 

mysql_close($con); 
} 
//header('Location: L501TempSorter.php'); 

?> 

如果我有首標( '位置:L501TempSorter.php');沒有評論,圖表不顯示一個東西,即使在頁面加載的時候,沒有點擊按鈕排序日期。如果它被註釋了,圖表就會顯示在onload上,但是點擊按鈕來排序日期會導致dataSorter.php並停留在頁面上,該頁面只顯示包含排序日期的數組。我真的需要幫助,提前謝謝!

回答

0

當你已經打印了一些東西時,你不能使用header,就像你使用//header('Location: L501TempSorter.php');一樣。

如果您試圖將print的輸出保存到變量$help,則需要使用sprint代替。打印將始終輸出到輸出緩衝區,並始終返回1.對於任何未以svs開頭的打印函數,在函數名稱中的打印始終指示它將返回結果字符串而不是輸出字符串之前,打印函數是正確的。

爲解決您的問題,數據未顯示,請張貼按鈕的代碼。它應該是一個阿賈克斯像

<script> 
$.getJSON('dataSorter.php', { 
    sort: 'sortValue', 
    STime: /* get start value */, 
    ETime: /* get end value */, 
    SDate: /* get start value */, 
    EDate: /* get end value */ 
}, function(data) { 
    options.xAxis.categories = json[0]['data']; 
    options.series[0] = json[1]; 
    chart = new Highcharts.Chart(options); 
    /* or anything that updates your chart */ 
}); 
</script> 

在php腳本運行時,執行onClick函數。你或許應該URL編碼您Location:部分

<?php 
header('Location: dataSorter.php?start='.urlencode($start).'&end='.urlencode($end)); 

雖然我不明白,爲什麼你正在使用header('Location: ...');這裏反正?你已經在服務器上,爲什麼告訴客戶端瀏覽器加載一個不同的位置,include你的腳本現在應該運行。

0

你是什麼,當你使用這個腳本僅返回JSON使用位置,以案例的目的是什麼?當您在javascirpt加載JSON,你運行你的整個PHP腳本,這樣反而OD返回JSON你重定向到其他位置,因此JSON是不是在JavaScript加載。

相關問題