【发布时间】:2012-08-13 17:41:55
【问题描述】:
我在导入 csv 以获取 highstock 图表时遇到了一些问题。 我使用与 ohlc 示例相同的代码(在本地运行良好),但使用了另一个 CSV,它是由 php 在我的本地主机上创建的。
PHP 获取 CSV
<?PHP
// Declare the new variable as an array
$arrCSV = array();
// Open the CSV file
if (($handle = fopen("http://ichart.finance.yahoo.com/table.csv?s=AAPL&d=7&e=7&f=2012&g=d&a=8&b=7&c=1984&ignore=.csv", "r")) !==FALSE)
{
// Set the parent array key to 0
$key = 0;
// While there is data available loop through unlimited times (0) using separator (,)
while (($data = fgetcsv($handle, 0, ",")) !==FALSE) {
// Count the total keys in each row
$c = count($data);
//print $c . "<BR>"; // <------ 7 o numero de colunas
//Populate the array
If ($key != 0) {
$arrCSV[$key-1][0] = strtotime($data[0]); //Time
$arrCSV[$key-1][1] = $data[1]; //Open
$arrCSV[$key-1][2] = $data[2]; //High
$arrCSV[$key-1][3] = $data[3]; //Low
$arrCSV[$key-1][4] = $data[6]; //Adj Close
$arrCSV[$key-1][5] = $data[5]; //Volume
}
$key++;
} // end while
$keymax = $key;
// Close the CSV file
fclose($handle);
} // end if
print "?(/* AAPL historical OHLC data from the Google Finance API */<BR>";
echo json_encode($arrCSV,JSON_NUMERIC_CHECK);
print ");";
?>
导入和创建图表的代码:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Highstock Example</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$.getJSON('http://localhost/teste03.php', function(data) {
// create the chart
chart = new Highcharts.StockChart({
chart : {
renderTo : 'container'
},
rangeSelector : {
selected : 2
},
title : {
text : 'AAPL Stock Price'
},
series : [{
type : 'ohlc',
name : 'AAPL Stock Price',
data : data,
dataGrouping : {
units : [[
'week', // unit name
[1] // allowed multiples
], [
'month',
[1, 2, 3, 4, 6]
]]
}
}]
});
});
});
</script>
</head>
<body>
<script src="js/highstock.js"></script>
<script src="js/modules/exporting.js"></script>
<div id="container" style="height: 500px; min-width: 500px"></div>
</body>
</html>
最后它只是给我一个空白页...... 这是由于使用 localhost 引起的吗?数组的顺序(下降而不是上升)?
帮助?
更新:添加了 json_encode 但仍然不起作用。
【问题讨论】:
-
只是为了添加更多信息,当前php正在打印以下csv:[[1344290400,622.77,625,618.04,618.26,10373100],[1344204000,617.29,624.87,615.26,619.89,1078940 (...)]]
-
就是这样,时间戳不是按升序排列的。检查下面的编辑答案
-
不,它仍然不起作用。同时,在对 consolo.log 进行一些测试后,问题似乎出在 getJSON 上。它运行,至少在控制台上它说: [12:16:26.572] GET http://(..)teste05.php [HTTP/1.1 200 OK 2766ms] 但它没有运行,因为我添加了一个控制台.log 在那里,从未收到任何输出。
-
所以你的 ajax 调用失败了。您如何访问当前页面?它也与本地主机?确保您没有发出跨域请求。你知道跨域ajax调用吗?如果没有看到这个,en.wikipedia.org/wiki/Same_origin_policy
标签: php javascript csv highcharts highstock