【问题标题】:Array Is Empty When It Isn't... JavaScript [duplicate]数组不是空的时候是空的...... JavaScript [重复]
【发布时间】:2018-06-07 00:13:30
【问题描述】:

所以我正在做的是从一个 json 文件中获取值并将它们推送到一个数组中,以便我可以随机选择一个并将其显示在一个 html 文件中。我遇到的问题是,即使数组中有东西,它也会把它当作空的......

var quotes = [];
var authors = [];

function loadJSON(callback) {   

    var xobj = new XMLHttpRequest();
    xobj.overrideMimeType("application/json");
    xobj.open('GET', 'quotes.json', true); 
    xobj.onreadystatechange = function () {
        if (xobj.readyState == 4 && xobj.status == "200") {
        // Required use of an anonymous callback as .open will NOT return a value but simply returns undefined in asynchronous mode
            callback(xobj.responseText);
        }
    };
    xobj.send(null);  
}

function init() {
    loadJSON(function(response) {
        // Parse JSON string into object
        var data = JSON.parse(response);
        for(var i in data){
            var key = i;
            var val = data[i];
            quotes.push(key);
            authors.push(val);
        }
    });
}

init();

var index = Math.floor(Math.random()* (quotes.length + 1));

document.getElementById("p1").innerHTML = "<span class=\"quotes\">&ldquo;</span>" + quotes[index] + "<span class=\"quotes\">&rdquo;</span>" + "<span id=\"author\">" + " – " + authors[index] + "</span";

所以在我的 init 函数中,它将键和 val 推送到一个数组,但它把它当作是空的......如果这是一个简单的问题,我很抱歉,但我对 JSON 很陌生。谢谢

【问题讨论】:

  • 另外你最后的&lt;/span 缺少&gt;
  • @Xufox 好的,谢谢,这也只是复制粘贴错误
  • 尝试将最后 2 行放入 init 函数中
  • @Ayudh 成功了,谢谢!
  • 该死的答案好像被我打败了哈哈

标签: javascript arrays json node.js xmlhttprequest


【解决方案1】:

我认为您的问题是,在 init 中的工作实际完成之前,您正在执行代码的最后两行(在调用 init 函数之后)。

换句话说,将回调传递给init,就像你对loadJSON所做的那样,然后执行其中的最后两行。

【讨论】:

    【解决方案2】:

    正如 Xufox 所指出的,您正在处理异步代码,当 getElementById 运行您的数据请求时,您的数据请求尚未完成,因此您最终会得到一个用于 innerHTML 的空数组。

    这与您的问题无关,但不能将for ... in 用作much as you can when dealing with arrays,更喜欢老派for,或者,如果您使用的是Babel,则使用for of

    【讨论】:

    • 我会尽量避免使用它谢谢
    猜你喜欢
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2012-01-09
    • 2020-10-21
    相关资源
    最近更新 更多