2017-09-02 101 views
1

我想呈现给ui/print来控制台从GET响应中记录一些对象值。如何从REST响应呈现对象

我使用节点JS为我的服务器端和HTML + JS为我的客户端。

因为我的目标是呈现数据,并且请求类型是跨域,所以我不能使用“获取”功能。 我唯一的选择是通过“JSONP”dataType发送它。

实际上,请求被发送并且响应也是通过回调接收的,但是我的代码是向控制台输出“null”而不是响应数据。 当我尝试使用JSON.parse()时收到了“parseerror”。

预期结果是仅获取图像标记值(2.0.90)并将其打印在控制台日志中/呈现给用户界面。

async function uiChecking() { 
    let index; 
    const hostsDock = [qa + dockers]; 
    let lengthVal = hostsDock.length; 
    for (let hostIndxD = 0; hostIndxD < lengthVal; hostIndxD++) { 
     index = hostIndxD; 
     let url = hostsDock[hostIndxD]; 

     $.ajax({ 
      url: url, 
      dataType: 'jsonp', 
     }).done(function(data) { 
      console.log("A " + data); 
     }); 

    } 
} 

** ** Server.js

var express = require('express'); 
var cors = require('cors'); 
var app = express(); 
var path = require("path"); 
var fetch = require('fetch-cookie')(require('node-fetch')); 
var btoa = require('btoa'); 
var http = require('http'); 


var corsOptionsDelegate = function (req, callback) { 
    var corsOptions; 
    if (whitelist.indexOf(req.header('Origin')) !== -1) { 
     corsOptions = { origin: true } // reflect (enable) the requested origin in the CORS response 
    }else{ 
     corsOptions = { origin: false } // disable CORS for this request 
    } 
    callback(null, data , corsOptions) // callback expects two parameters: error and options 
}; 

app.engine('.html', require('ejs').__express); 
app.set('views', __dirname + '/view'); 
app.set('view engine', 'html'); 


app.use(express.static(path.join(__dirname, 'public'))); 

app.get('/', function(req, res){ 
    res.render('index'); 
    res.render('logo'); 
    res.writeHead(200, {'Content-Type': 'application/json'}); 
}); 

// app.get('/products/:id', cors(corsOptionsDelegate), function (req, res, next) { 
//  res.json({msg: 'This is CORS-enabled for a whitelisted domain.'}) 
// }); 


app.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.jsonp(response); 
     }); 
    }); 
    reqGet.end(); 
    reqGet.on('error', function (e) { 
     console.error(e); 
    }); 
}); 

if (app.settings.env === 'production') { 
    app.error(function(err, req, res) { 
     res.render('new404.html', { 
      status: 500, 
      locals: { 
       error: error 
      } 
     }); 
    }); 
} 

app.listen(8033, function() { 
    console.log('CORS-enabled web server listening on port 8033') 
}); 

enter image description here

+0

广东话你访问对象已经?喜欢; 'function:function(data){console.log(data [0] .id);''等 – keja

+0

它不工作,它会收到“parseerror”和控制台日志 - {readyState:4,setRequestHeader:ƒ,getAllResponseHeaders:ƒ,getResponseHeader:ƒ,overrideMimeType:ƒ,...} –

+0

这doesn'吨需要是一个异步功能。 – programmer5000

回答

0

您需要通过响应迭代返回结果如。

$.each(data, function(index) { 
    console.log(data[index].ui); 
    console.log(data[index].id); console.log(data[index].Name); 
}); 
+0

谢谢,但它收到所有参数的“未定义”:/ –