【问题标题】:use a variable outside a function javascript [duplicate]在函数javascript之外使用变量[重复]
【发布时间】:2013-10-27 09:07:12
【问题描述】:

我正在尝试通过使用 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 对此给出了错误。

请帮帮我 问候

【问题讨论】:

    标签: javascript node.js xmlhttprequest


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您是否一心想要使用xmlhttprequest?由于您使用的是节点,因此有更简单、更简洁的解决方案可以为您包装此功能,例如流行的 request 库。下面是一个示例,它可以用更少的代码行实现您想要的结果:

      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 让我知道,我会用说明更新这个答案,只是想我会建议一种更简单的方法来首先实现同样的事情:)

      【讨论】:

      • 谢谢杰夫。这对我来说没问题,但问题仍然存在,我如何在函数内部编写它以响应或在函数外部获取它的值..????是的 .. 我对使用 node.js 和 javascript 很执着
      • 他没有建议不要使用 Node 或 JavaScript。
      • 更新了将响应移动到新范围的最简单方法的答案。由于 ajax 函数是异步的,因此您必须在某个函数内处理响应。这是尽可能干净的。我在this answer 上写了一个关于函数和异步的冗长解释,这可能会帮助你理解这些事情是如何更好地工作的:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-10
      • 2018-11-10
      • 2018-01-14
      • 2018-05-27
      • 1970-01-01
      相关资源
      最近更新 更多