无法将javascript http响应保存到变量中

时间:2015-06-22 18:27:29

标签: javascript node.js

我一直在使用bash中的这个Wikipedia node module,我在保存对变量的响应方面遇到了一些麻烦。我可以使用console.log(response)来查看完整的响应,但我不能让它坚持变量。

我试过看一下响应的类型,但它只返回undefined。有什么想法吗?

var wikipedia = require("node-wikipedia");

wikipedia.page.data("Clifford_Brown", { content: true }, function(response) {
    console.log(typeof response);
});

理想情况下,我想将具有html对象的响应分配给变量,然后使用cheerio通过jQuery选择器获取html对象的片段,但我相信我至少需要将其放入首先是变量,对吧?

这是回复的一部分。

 { title: 'Clifford Brown',
  redirects: [],
  text: { '*': '<div class="hatnote">For the scrutineer for the Eurovision Song Contest, see <a href="/wiki/Clifford_Brown_(scrutineer)" title="Clifford Brown (scrutineer)">Clifford Brown (scrutineer)</a>.

修改/修复

我能够根据@ idbehold的评论让它工作。一切都需要在回调中完成,所以不是在请求之后调用变量,而是在回调中返回它,这样就可以访问函数外部的变量了。

var wikipedia = require("node-wikipedia");
var data;
wikipedia.page.data("Clifford_Brown", { content: true }, function(response) {
data = response;

})

1 个答案:

答案 0 :(得分:0)

StackOverflow上出现了很多这类问题,而这些问题都源于不了解AJAX的异步性质。您的代码不会在.data()调用时阻止等待服务器响应。在该调用之后运行的任何代码行将立即运行,而回调函数中的代码将在从服务器返回数据之后的某个时间点运行。为响应获取数据而做的任何事情都必须在回调中发生。

var wikipedia = require("node-wikipedia");

wikipedia.page.data("Clifford_Brown", { content: true }, function(response) {
    console.log(typeof response);
    // do something with the response here
});
// any code here will run before the above callback is invoked.
// don't try to do anything with the response here.