我正在创建一个网站,该网站读取外部托管的json文件,然后使用node.js填充网站内容。
为了证明我的目的,这是我在node.js中尝试做的一个非常简化的版本
var ids = [111, 222, 333];
ids.forEach(function(id){
var json = getJSONsomehow('http://www.website.com/'+id+'.json');
buildPageContent(json);
});
我想做的是什么?
(标记为“How do I return the response from an asynchronous call?”的副本,请参阅下面的评论以获得我的反驳意见
答案 0 :(得分:3)
您正试图同步获取它。你应该瞄准的目标不是像这样使用的函数:
var json = getJSONsomehow('http://www.website.com/'+id+'.json');
但更像是这样:
getJSONsomehow('http://www.website.com/'+id+'.json', function (err, json) {
if (err) {
// error
} else {
// your json can be used here
}
});
或者像这样:
getJSONsomehow('http://www.website.com/'+id+'.json')
.then(function (json) {
// you can use your json here
})
.catch(function (err) {
// error
});
您可以使用request
模块获取您的数据:
var request = require('request');
var url = 'http://www.website.com/'+id+'.json';
request.get({url: url, json: true}, (err, res, data) => {
if (err) {
// handle error
} else if (res.statusCode === 200) {
// you can use data here - already parsed as json
} else {
// response other than 200 OK
}
});
有关工作示例,请参阅this answer。
有关详细信息,请参阅:https://www.npmjs.com/package/request
答案 1 :(得分:0)
我认为问题出在异步请求中。函数将在请求完成之前返回结果。
AJAX_req.open( "GET", url, true );
第三个参数指定为异步请求。
您应该在请求完成后添加处理程序并执行所有操作。
例如:
function AJAX_JSON_Req( url ) {
var AJAX_req = new XMLHttpRequest.XMLHttpRequest();
AJAX_req.open( "GET", url, true );
AJAX_req.setRequestHeader("Content-type", "application/json");
AJAX_req.onreadystatechange = function() {
if (AJAX_req.readyState == 4 && AJAX_req.status == 200) {
console.log(AJAX_req.responseText);
}
};
}