0

我正在尝试通过使用 node.js 的 xmlhttprequest 从网页获取 html。我在互联网上找到的代码是:

var sys = require ('sys'),
url = require('url'),
XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest,
http = require('http'),
qs = require('querystring');
http.createServer(function (req, res) {
    var temp        
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
        var loc = xhr.responseText.search("Right Now");
        temp = xhr.responseText.substr(loc,loc+10);
        //console.log(temp);
        }
    }
xhr.open('GET', 'http://www.weather.com/weather/today/37.229572,-80.413940', true);
xhr.send(null);
console.log(temp);
res.write("pappu\n");
res.end();
}
).listen(80);

我想在函数外使用 xhr.responseText 但我无法做到。我尝试过不使用带有 temp 的 var 来使其成为全局变量,但 node.js 对此给出了错误。

请帮助我问候

4

2 回答 2

0

xmlhttprequest 异步工作,因此您console.log(temp);将无法按预期工作。因为在收到响应之前不会定义临时变量。因此,任何尝试在之后立即打印它xhr.send(null);都可能会出错。

于 2013-10-26T20:58:03.153 回答
0

你死心塌地使用xmlhttprequest?由于您使用的是节点,因此有一些更简单、更简洁的解决方案可以为您包装此功能,例如流行的请求库。这是一个示例,它可以在更少的代码行中实现您想要的结果:

var request = require('request');
request.get('http://www.weather.com/weather/today/37.229572,-80.413940', callback);

function callback(err, res){
  if (err) return console.error(err);
  console.log(res.body);
}

您所要做的就是运行npm install request以使其正确运行。如果由于某种原因您需要使用 xmlhttprequest 让我知道,我将使用说明更新此答案,只是想我会建议一种更简单的方法来首先实现相同的目标:)

于 2013-10-26T20:52:48.297 回答