我正在编写一个简单的函数,该函数将带有资产标签,调用我们的内部资产管理系统,并返回实际的商品ID,以便将来可以使用该ID进行API调用。
自从开始这个项目以来,我学到了很多东西,所以请原谅我可能错过的任何简单事情。我花了一点时间才意识到我需要将这段代码放在.onload()函数中,以便解析JSON响应并使之可行。
我已经将JSON请求解析为变量“ response”。我想了,这很容易,我可以只返回“ response.id”,但是...不可以。
var id = 0;
function changeID(newID) {
id = newID;
}
function zeroPad(num) {
return num.toString().padStart(4, "0");
}
function tag2ID(assetNum) {
var data = null;
var xhr = new XMLHttpRequest();
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log("1: " + this.responseText);
}
});
var url = "URL WAS HERE" + zeroPad(assetNum);
xhr.open("GET", url, true);
xhr.setRequestHeader("authorization", "KEY WAS HERE");
xhr.setRequestHeader("accept", "application/json");
xhr.setRequestHeader("content-type", "application/json");
xhr.onload = function () {
var response = JSON.parse(xhr.response);
if (xhr.status >= 200 && xhr.status < 400) {
console.log("2: " + response.id);
console.log("success");
console.log("ID 1: " + id);
id = response.id;
console.log("ID 2: " + id);
} else {
console.log('error');
}
}
xhr.send(data);
return id;
}
因此,您可以看到在更改变量ID的值之前和之后,我正在记录ID的值。当我运行该函数时,它将返回0,但是下次我运行该函数时,即使我在另一个标记上调用它,也将返回该函数上一次运行的值。
我知道这是API请求时间的问题,但我只是无法理解为什么变量可以通过onload()中的console.log进行更新,而实际上并没有返回。
由于我全神贯注,任何帮助将不胜感激。