我对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,提前感谢您的帮助
答案 0 :(得分:1)
您正在发送JSON:
回调显示了我想要的JSON格式的响应
...但客户期待JSON-P
dataType : 'jsonp',
或者:
dataType
行并让它使用Content-Type标头)并在响应标头上设置Access-Control-Origin
以授予网站访问权限的权限-domain 或 callback
,发送Content-Type: application/javascript
(不是JSON!),然后返回callback_value(your_json);
作为响应正文。答案 1 :(得分:0)
如果是jsonp,你需要一个回调函数,然后在该回调函数中返回你的响应。