我一直在浏览教程和浏览页面,但仍然不明白什么是遗漏/错误(我知道,即使是最终的初学者水平我也失败了。)
我的目标是获得属性'market_ask'的价值,但我收到结果'未定义' 你们中的任何人都能给我一些指示吗? API文档位于https://developers.quoine.com/#get-products
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://api.quoine.com", false);
xhr.send("GET", '/products/1' );
console.log(xhr.responseXML.market_ask);
答案 0 :(得分:0)
XMLHTTPRequest是异步的,即当代码到达console.log()
时,响应尚未到达。
以下内容应该有效:
const XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
const xhr = new XMLHttpRequest();
// completion callback
xhr.addEventListener("load", () => {
console.log(xhr);
console.log(xhr.responseText);
const data = JSON.parse(xhr.responseText);
console.log(data.market_ask);
});
xhr.open("GET", "https://api.quoine.com/products/1");
xhr.send();
编辑上面我得到以下输出:
$ node xmlhttprequest.js
{ UNSENT: 0,
OPENED: 1,
...
responseText: '{"id":"1",...}',
responseXML: '',
...
dispatchEvent: [Function] }
{"id":"1",...,"market_ask":10084.236,...}
10084.236
如果您可以使用jQuery,即您的脚本将在浏览器中运行,那么我建议使用带有承诺的ajax()
,例如。
$.ajax('https://api.quoine.com/products/1')
.then(() => {
// success ...
})
.catch(error => {
// failure ...
});
EDIT2 这是使用Promisesin Node.js,f.ex包装第一个变体的方法。作为效用函数:
const XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
new Promise((resolve, reject) =>
{
const xhr = new XMLHttpRequest();
xhr.addEventListener("load", () => {
try {
if (xhr.status !== 200)
throw new Error(`request failed with ${xhr.status}`);
const response = JSON.parse(xhr.responseText);
resolve(response);
} catch (e) {
reject(e);
}
});
xhr.addEventListener("error", reject);
xhr.open("GET", "https://api.quoine.com/products/1");
xhr.send();
})
.then(response => {
console.log("Market ask", response.market_ask);
})
.catch(error => {
console.log(error.message);
});