我是Node.js的新手,我创建了一个方法,它应该通过ajax异步获取jsonp数据并在图中显示检索到的内容。无法创建并传递jsonp数据
function loadChart(destElementId, alertId) {
$.ajax({
url:'http://localhost:3000/products/data/productsData.js',
type: "GET",
data: {prodId: prodId},
jsonp: true,
dataType : 'json',
jsonpCallback: "jsonpCallback"
});
window["jsonpCallback"] = function(data) {
populateData(data, destId);
}
}
在正常应用,我想通过通过外部Web服务获取真实的数据:当包含URL指向一个静态的js文件(在这种情况下productsData.js)JSONP数据,此方法效果很好。我创建了以下js文件(data-client.js),用于从特定Web服务中检索数据。当呼叫是基于浏览器的时候,数据会像普通的json一样成功读取,并在浏览器中显示。
var express = require('express');
var router = express.Router();
var http = require('http');
var yaml_config = require('node-yaml-config');
var config = yaml_config.load(__dirname + '/../config/app-config.yml');
router.get('/data/:id', function (req, res, next) {
var opts = {
host: config.alertService.host,
port: config.alertService.port,
method: 'GET',
path: '/DataService/rest/receiveData/' + req.params.id
}
var reqGet = http.request(opts, function (dataResponse) {
var responseString = '';
dataResponse.on('data', function (data) {
responseString += data;
});
var response = {x:[],y:[],z:[],t:[]};
dataResponse.on('end', function() {
var responseObject = JSON.parse(responseString);
var accs = responseObject.data.listPCS;
for(var i in accs){
response.x.push(accs[i].accX);
response.z.push(accs[i].accY);
response.y.push(accs[i].accZ);
response.t.push(accs[i].timestamp);
}
res.json(response);
});
});
reqGet.end();
reqGet.on('error', function (e) {
console.error(e);
});
});
module.exports = router;
用于使用实时数据JSONP的第一步是,以取代先前的URL值:
url: 'http://localhost:3000/products/data/'+productId,
第二步骤是在数据client.js取代:
res.json(response);
附:
res.jsonp('jsonpCallback('+ JSON.stringify(response) + ');');
不知何故数据不会被提取。当我试着通过浏览器获得的数据(即通过进入http://localhost:3000/data/ID937),但是我得到以下结果:
"jsonpCallback({\"x\":[1,1,1],\"y\":[2,1,4],\"z\":[0,0,9],\"t\":[1462790772000,1462790772010,1462790772020]});"
是否有人可以告诉我在哪里的问题可能是什么?我会非常感谢。
昆汀,非常感谢! – Anto