我试图将js脚本转换为node.js脚本。 JS脚本工作正常,并设法从this URL提取数据并正确使用这些信息。但是,当我尝试在Node.js上运行它时,我收到错误"Cannot read property of 'fixtures' undefined."
我已添加this package来提取数据,但我不确定为什么会这样做。现在抛出一个错误。
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
var xhr = new XMLHttpRequest();
//Get Data
var getJSON = function(url, callback) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'json';
xhr.onload = function() {
var status = xhr.status;
if (status === 200) {
callback(null, xhr.response);
} else {
callback(status, xhr.response);
}
};
xhr.send();
};
//Use Data
getJSON('http://api.football-data.org/v1/teams/343/fixtures',
function(err, data) {
if (err !== null) {
console.log(" An error has occured.")
} else {
var latest;
for(x = 0; data.fixtures[x].status !== "TIMED"; x++) {
latest = data.fixtures[x].matchday - 1;
}
}};
错误行在while(data.fixtures[x].status !== "TIMED")
行,错误是
for(x = 0; data.fixtures[x].status !== "TIMED"; x++) {
^
TypeError: Cannot read property 'fixtures' of undefined
请您解释一下为什么JS可以看到数据并使用它,但node.js看到该属性未定义?
非常感谢。
编辑:删除了不应该存在的遗留循环。
答案 0 :(得分:1)
xmlhttprequest
属性是XMLHttpRequest Level 2部分,但xhr.response
目前仅支持1:
注意:此库目前符合XMLHttpRequest 1。
因此undefined
将是xhr.responseText
。
只会设置if (status === 200) {
try { // use a try block here in case the the response is not parseable
callback(null, JSON.parse(xhr.responseText));
} catch(e) {
callback(e)
}
} else {
callback(status, xhr.response);
}
,这是一个字符串,因此您需要自己添加json的解析。
{{1}}
答案 1 :(得分:0)
您收到该消息的原因是因为回调中的变量data
是 undefined
。它之所以如此,是因为你传递了
callback(null, xhr.response); //<-- You should have used responseText
但即使这样也无法解决问题 - 文字不是json。所以解析它
callback(null, JSON.parse(xhr.responseText));