2013-10-26 96 views
0

我想通過使用node.js的xmlhttprequest從網頁獲取html。我已經互聯網上找到的代碼是:在函數外部使用變量javascript

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功能之外,但我無法做到這一點。我已經嘗試不使用var使temp成爲全局變量,但是node.js卻給出了這個錯誤。

請幫我 問候

回答

0

您使用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讓我知道,我會更新這個答案有說明書,只是想我會建議一個更簡單的方式率先實現同樣的事情:)

+0

謝謝你傑夫。這對我來說還行,但問題仍然是一樣的,我如何在函數內部寫入它或者在函數外部獲得它的值? 和是的..我死了使用node.js和javascript –

+0

他不建議不使用節點或JavaScript。 – Quentin

+0

更新了將答案移動到新範圍的最簡單方法的答案。由於ajax函數是異步的,你必須在一些函數中處理響應。這是乾淨的,你可以得到它。我寫了一個冗長的函數解釋和異步[這個答案](http://stackoverflow.com/questions/18886089/how-do-i-callback-with-js-function/18886376#18886376)這可能會幫助你瞭解這些東西如何更好地工作:) –

0

XMLHttpRequest的異步工作,所以你console.log(temp);將無法按預期工作。因爲臨時變量在接收到響應之前不會被定義。因此,任何在xhr.send(null);之後立即打印的企圖都可能會導致錯誤。