提前非常感谢。
我想设置一个phantomjs Highcharts导出服务器。它应该接受json选项作为输入和输出jpeg图像文件。
以下是我的工作:
运行
phantomjs highcharts-convert.js -host 127.0.0.1 -port 3001
然后我尝试在此站点中使用客户端代码:http://export.highcharts.com/demo来发送请求。我更改了表单操作URL:
<form id="exportForm" action="./" method="POST">
到此:
<form id="exportForm" action="http://0.0.0.0:3001" method="POST">
并单击“Highcharts配置对象(JSON)”。我得到的就是这条消息:
渲染失败: SyntaxError:无法解析JSON字符串
由于可以在Highcharts服务器中正确处理相同的请求,因此错误必须位于我正在使用的Highcharts服务器端js代码中。我也尝试了以下命令:
phantomjs highcharts-convert.js -infile options.js \
-outfile chart.png -scale 2.5 -width 300
将此代码放在options.js
:
{
infile: {
xAxis: {
categories:['Jan','Feb','Mar','Apr',
'May','Jun','Jul','Aug',
'Sep','Oct','Nov','Dec']
},
series:[
{
data:[29.9,71.5,106.4,129.2,
144.0,176.0,135.6,148.5,
216.4,194.1,95.6,54.4]
}]
},
callback: function(chart){
chart.renderer
.arc(200,150,100,50,-Math.PI,0)
.attr({fill:'#FCFFC5',stroke:'black','stroke-width':1})
.add();
},
constr: "Chart",
outfile: "//tmp//chart.png"
}
它会成功生成png。
我猜Highchart没有在导出函数中做太多工作,我在highcharts-convert.js文件中发现了一些拼写错误。谁可以帮我这个事?非常感谢。
答案 0 :(得分:6)
我终于解决了这个问题。我想在所谓的“JSON”字符串中存在误解。 Javascript导出服务器不接受任何真正的“JSON”字符串。一个真正的“JSON”字符串将引用所有字符串,有些像
{
"value": [1,2,3],
"name": "jack"
}
导出服务器接受的实际上是用于创建Javascript对象的 Javascript代码,如:
{
value: [1,2,3],
name: "jack"
}
这是因为服务器将使用此字符串作为生成的网页中的Javascript代码的一部分。我写了一个小函数来将JSON字符串转换为这种格式并将其传递给服务器,它最终有效。
var getUnQuotedJsonString = function (str) {
return str.replace(/"\w+":/g, function(s, key) {
return s.replace(/"/g, "");
});
}
答案 1 :(得分:0)
当我尝试发送的JSON字符串比托管highcharts导出器WAR文件的服务器接受的时间更长时,我收到了同样的错误。检查服务器中的消息长度参数。确保它足够长以保存发送的请求。现在,既然你没有提到你正在使用的导出服务器(java或PHP),我想你实际上并没有为导出服务器设置web前端,你只需设置无头命令行导出(phantomJS + some) highcharts js文件)。要使用导出服务器在前端使用(例如,当用户点击网页上的导出按钮时),您还需要设置Java或PHP。
答案 2 :(得分:-1)
这是因为
启动的Phantoms HTTP服务器phantomjs highcharts-convert.js -host ... -port ...
期望参数以JSON格式发送。请阅读documentation,parapgraph '作为网络服务器开始'
出于好奇......你发现了什么拼写错误?
答案 3 :(得分:-1)
如果有人想要从json_encode
-
function unQuote($str){
return preg_replace_callback('/"\w+":/',
function ($match){
return str_replace('"', '', $match[0]);
},
$str );
}