【问题标题】:jsonp callback data in highcharts not workinghighcharts中的jsonp回调数据不起作用
【发布时间】:2013-09-24 19:24:35
【问题描述】:

使用 nodejs 和 jsonp,试图找出 highcharts 但它不起作用,下面的代码

<script type="text/javascript">
$(function () {
  $.getJSON('http://myserverhere.com:3010/?f=GBP&t=USD&callback=?', function (data) {
    alert("hey");
    console.log(data);
    // create the chart
    $('#container').highcharts('StockChart', {
      rangeSelector: {
        selected: 1
      },
      title: {
        text: 'AAPL Stock Price'
      },
      navigator: {
        enabled: true,
        height: 25
      },
      series: [{
        type: 'candlestick',
        name: 'AAPL Stock Price',
        data: data,
        dataGrouping: {}
      }]
    });
  });
});
</script>

下面是我在nodejs中的server.js

var http = require('http');
var url = require('url');
var fs = require('fs');
var port = 3010;
var path = "C:\\mypath\\";
http.createServer(function (req, res) {
  if (req.url === '/favicon.ico') {
    res.writeHead(200, {
      'Content-Type': 'image/x-icon'
    });
    return res.end();
  }
  var query = url.parse(req.url, true).query;
  var urlString = {
    pathname: url.parse(req.url).pathname,
    queryparam: url.parse(req.url, true).query
  };
  var file = query.f + query.t;
  var gbpusd;
  fs.readFile(path + file + '_M1.json', function (err, data) {
    if (err) {
      console.log(err);
    }
    //console.log(data);
    gbpusd = JSON.parse(data);
    console.log("query param");
    console.log(urlString.queryparam.callback);
    if (urlString.queryparam.callback && urlString.queryparam.callback != '?') {
      console.log("in if block");
      gbpusd = urlString.queryparam.callback + "(" + gbpusd + ");";
    }
    //console.log(eurusd);
    res.writeHead(200, {
      'content-type': 'application/json',
      'content-lenght': gbpusd.length
    });
    //res.write(JSON.stringify(gbpusd));
    var p = JSON.stringify(gbpusd);
    res.end(p);
  });
}).listen(port);
console.log("server running at port 3010..");

它是一个简单的 highchart 烛台,我正在尝试使用我的 jsonp 数据。 控制台记录数据以及成功返回 jsonp 函数,但在 highchart 回调中它不起作用,甚至警报没有运行。 我可以闻到节点 res.end() 或节点返回数据的方式存在一些问题,不知道,但只是一个经过计算的猜测。 请任何人。

【问题讨论】:

  • 代码格式在 SO 中不好,我在上一篇文章中也写过,但没人听到!!
  • 控制台中没有任何内容,没有错误,但图表未填充
  • 最好发布您的 JSON 结果而不是您的服务器代码 - 我们不知道正在生成什么。
  • 感谢 Rijvi 的回复 [[dateinseconds,open,high,low,close],..],如下所示:[[1378088520,1.55159,1.55159,1.55157,1.55157],[1378088580, 1.55156,1.55159,1.55156,1.55157],[1378088640,1.55156,1.55163,1.55155,1.55159],...] 这些与 highstock 烛台示例中产生的完全相同,问题是 highstock 没有渲染我的 jsonp 数据
  • 更多关于这一点,浏览器可以看到数据我的意思是我可以将数据返回到浏览器,但它在 highstock 烛台示例中不起作用不知道为什么。

标签: node.js highcharts jsonp


【解决方案1】:

好的,我终于解决了,是 stringify 的位置错误,数据应该先被字符串化,然后再被包裹在 jsonp 调用中,即在下面的调用之前,这是有道理的,否则回调函数将被字符串化。那是错误,我的代码中断了

if(urlString.queryparam.callback && urlString.queryparam.callback != '?'){
        console.log("in if block");
        gbpusd = urlString.queryparam.callback + "(" + gbpusd + ");";       
    }

首先我使用 JSON.parse() 解析数据,然后使用 stringify。 var parseddata = JSON.parse(data); gbpusd = JSON.stringify(parseddata);

【讨论】:

    猜你喜欢
    • 2012-10-09
    • 2020-09-26
    • 1970-01-01
    • 2016-07-02
    • 2014-04-03
    • 2014-08-14
    • 2011-12-02
    • 1970-01-01
    • 2014-10-26
    相关资源
    最近更新 更多