2014-01-23 32 views
0

我对Node应用程序有点麻烦,问题是:我在网站“x”中有一个脚本,并且此脚本调用另一个服务器上的函数(如分析),我用ajax调用函数,当函数返回数据时,发生一些奇怪的现象,当我使用Chrome浏览器中的Developer Tools检查网络时,回调显示了我想要的JSON格式的响应,但没有向我显示数据。我的代码:如何从GET请求返回数据与node.js

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,在此先感谢您的帮助

+0

是否有任何错误讯息?它可能是一个同源 - 政策问题吗?或者是服务器的第一个代码,另一个服务器上的第二个代码? –

回答

0

在在jsonp的情况下,你需要一个回调函数,然后在回调中返回你的回应。

1

您发送JSON:

回调显示响应就像我在JSON格式

想......但客户期待JSON-P

dataType : 'jsonp', 

可以是:

  1. 告诉客户期望JSON(或只是删除dataType线,让它使用Content-Type头),并设置响应头Access-Control-Origin给该网站的存取权限,跨域
  2. 改为发回JSON-P(在查询字符串中查看callback,发送Content-Type: application/javascript(不是JSON!),并将callback_value(your_json);作为响应主体返回。