如何使用node.js返回GET请求以来的数据

时间:2014-01-23 22:53:18

标签: javascript jquery ajax node.js

我对Node应用程序有点麻烦,问题是:我在网站“x”中有一个脚本,这个脚本调用另一台服务器上的一个函数(比如分析),我正在调用这个函数使用ajax并且当函数返回数据时,发生一些好奇,当我使用Chrome中的Developer Tools检查网络时,回调显示响应,就像我想要的JSON格式,但不显示数据。我的代码:

var xml2js  = require('xml2js'),
    http    = require('http'),
    request = require('request');

var parserController = function (aw){

    console.log('Parse Controller load');

    aw.get('/ads/:keyword/:sid/:pid/:count', function (req,res){
        res.setHeader('Content-Type', 'application/json');
    request('http://'+req.params.sid+'.'+req.params.pid+'.autoweb-xml.com/feed?&sid='+req.params.sid+'&auth=2Al5&subid=&q='+req.params.keyword+'&ip=127.0.0.1&ua=Mozilla/5.0%20(Windows%20NT%206.1;%20WOW64;%20rv:26.0)%20Gecko/20100101%20Firefox/26.0&ref=awebads.lan&count='+req.params.count+'&state=&city=', function (error, response, body) {
     if (!error && response.statusCode == 200) {
        var parser = xml2js.parseString;
        var data = '';

            parser(body,{explicitRoot : false}, function (err, result){
        if(!err){
            data = result;
            dataP=data.results[0];
            dataS=dataP.sponsored[0];
            console.log(dataS.listing);
                return res.send(dataS.listing);
        }
        else
        {
            console.log(err);
        }
            })

          }
        })//en del request
    });
};

我的通话功能是:

var xhr = $.ajax({
    type:'GET',
          url:'http://HOST/ads/'+configParams.keyword+'/'+configParams.envSource+'/'+configParams.envPublisher+'/'+configParams.envCount,
    dataType : 'jsonp',
    async: false,
    crossDomain : true
})

xhr.done(function (data){
    console.log(data);
    data.forEach(function(item){
    window.collections.ads.add(item);
});
}).fail(function (err) {
    //console.log('failed');
    //console.log(err)
});

当我在控制台中显示数据时,此部分向我显示XMLHTTPRequest,提前感谢您的帮助

2 个答案:

答案 0 :(得分:1)

您正在发送JSON:

  

回调显示了我想要的JSON格式的响应

...但客户期待JSON-P

dataType : 'jsonp',

或者:

  1. 告诉客户端期望JSON(或者只删除dataType行并让它使用Content-Type标头)并在响应标头上设置Access-Control-Origin以授予网站访问权限的权限-domain
  2. 改为发送JSON-P(查看查询字符串中的callback,发送Content-Type: application/javascript(不是JSON!),然后返回callback_value(your_json);作为响应正文。

答案 1 :(得分:0)

如果是jsonp,你需要一个回调函数,然后在该回调函数中返回你的响应。