0

nodejsとjsonpを使用して、ハイチャートを理解しようとしていますが、コードの下で機能していません

<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..");

単純なハイチャート ローソク足です。jsonp データを操作しようとしています。コンソールはデータをログに記録し、jsonp関数を正常に返しますが、ハイチャートコールバックでは機能せず、アラートも実行されていません。ノード res.end() またはノードがデータを返す方法に何らかの問題があるにおいがしますが、わかりませんが、計算された推測にすぎません。どなたかお願いします。

4

1 に答える 1

0

わかりました最終的に解決しました。間違っていたのはstringifyの配置でした。jsonp呼び出しでラップされる前に、つまり呼び出しの下でデータを最初に文字列化する必要があります。そうしないと、コールバック関数がstringifyされます。それは間違いであり、私のコードは壊れています

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

また、最初に JSON.parse() を使用してデータを解析し、次に stringify を使用しています。var parseddata = JSON.parse(データ); gbpusd = JSON.stringify(parseddata);

于 2013-09-19T23:40:46.173 に答える