This question already has answers here:
How to return the response from an asynchronous call?
(42 个回答)
3年前关闭。
我确信我做的这一切都是错误的,但我有以下函数在控制台中返回“未定义”,即使它可以 console.log() 来自函数中相同位置的所需值,如代码中所述。
另一个奇怪的事情是,在浏览器中运行此代码后,我可以在浏览器控制台中键入“标签”,它会给出正确的结果
是什么赋予了? JavaScript 不是我的母语,所以我对它的行为方式有点困惑。我就是不明白。
我已经阅读了几乎所有的“可能已经有了我的答案的问题”,但是这些答案提供了那些我无法弄清楚如何应用于我的功能的答案。
注意:
JSON 来自 Joomla(3.1) 标签表。 我能够检索数据。 val === tagId 条件工作正常。 我喜欢爆米花。
然后像这样调用它:
(42 个回答)
3年前关闭。
我确信我做的这一切都是错误的,但我有以下函数在控制台中返回“未定义”,即使它可以 console.log() 来自函数中相同位置的所需值,如代码中所述。
var tags = [4, 5];
console.log(getTagNames(tags)); // 'undefined'
function getTagNames(tagArray) {
$.getJSON('js/tags.json', function(data) {
for (var i in tagArray) {
tagArray[i] = tagArray[i].toString();
var val = tagArray[i];
for (var t in data) {
var tag = data[t];
var tagName = tag.alias;
var tagId = tag.id;
if (val === tagId) {
tagArray[i] = tagName;
}
};
}
console.log(tagArray); // output ["foo", "bar"]
return tagArray;
});
}
另一个奇怪的事情是,在浏览器中运行此代码后,我可以在浏览器控制台中键入“标签”,它会给出正确的结果
["foo", "bar"]
。但是,当我尝试使用标签变量(即:元素的文本值等)时,它不起作用......是什么赋予了? JavaScript 不是我的母语,所以我对它的行为方式有点困惑。我就是不明白。
我已经阅读了几乎所有的“可能已经有了我的答案的问题”,但是这些答案提供了那些我无法弄清楚如何应用于我的功能的答案。
注意:
最佳答案
对 getJSON
的调用异步调用您的回调函数。
如果您需要函数 getTagNames
并在代码中的很多地方调用它,您可以进行更改以使其本身采用回调函数:
function getTagNames(tagArray, cb) {
$.getJSON('js/tags.json', function(data) {
for (var i in tagArray) {
tagArray[i] = tagArray[i].toString();
var val = tagArray[i];
for (var t in data) {
var tag = data[t];
var tagName = tag.alias;
var tagId = tag.id;
if (val === tagId) {
tagArray[i] = tagName;
}
};
}
console.log(tagArray); // output ["foo", "bar"]
cb(tagArray);
});
}
然后像这样调用它:
getTagNames(tags, function(tagArray) {
// do something with tagArray
});
关于javascript函数返回未定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17371982/