7

提前非常感谢。

我想设置一个 phantomjs Highcharts 导出服务器。它应该接受 json 选项作为输入和输出 jpeg 图像文件。

这是我所做的:

  1. 我从这个 repo 下载服务器端 js 代码:https ://github.com/highslide-software/highcharts.com/tree/master/exporting-server/phantomjs
  2. 我下载了 phantomjs 1.6.0
  3. phantomjs highcharts-convert.js -host 127.0.0.1 -port 3001
    

然后我尝试在这个站点使用客户端代码: http: //export.highcharts.com/demo来发送请求。我从此更改了表单操作网址:

    <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 文件中发现了一些错字。谁可以帮我这个事?非常感谢。

4

4 回答 4

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, "");
  });
}
于 2013-07-18T06:43:50.907 回答
0

当我尝试发送比托管 highcharts 导出器 WAR 文件的服务器接受的长度更长的 JSON 字符串时,我遇到了同样的错误。检查服务器中的消息长度参数。确保它有足够长的时间来保存发送的请求。现在,由于您没有提及您使用的是什么导出服务器(java 或 PHP),我想您实际上并没有为导出服务器设置 Web 前端,而您只是设置了无头命令行导出(phantomJS + some highcharts js 文件)。要在前端使用导出服务器(例如当用户单击网页上的导出按钮时),您还需要设置JavaPHP

于 2013-07-05T12:29:53.573 回答
-1

这是因为 Phantoms HTTP 服务器由

phantomjs highcharts-convert.js -host ... -port ...

期望参数以 JSON 格式发送。请阅读文档,段落“作为网络服务器启动”

出于好奇……你发现了什么错字?

于 2013-07-15T12:38:57.717 回答
-1

如果有人希望从以下结果中删除引号,我编写了一个类似的函数来为 PHP 解决这个问题json_encode-

function unQuote($str){
return preg_replace_callback('/"\w+":/',
                        function ($match){
                             return str_replace('"', '', $match[0]);
                         }, 
                         $str );
}
于 2015-06-04T18:10:38.280 回答