2014-01-23 33 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);作爲響應主體返回。