Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数组不为'时为空;TJavaScript_Javascript_Arrays_Json_Node.js_Xmlhttprequest - Fatal编程技术网

数组不为'时为空;TJavaScript

数组不为'时为空;TJavaScript,javascript,arrays,json,node.js,xmlhttprequest,Javascript,Arrays,Json,Node.js,Xmlhttprequest,所以我要做的是从一个json文件中获取值,并将它们推送到一个数组中,这样我就可以随机选择一个值,并将其显示在一个html文件中。我遇到的问题是,即使数组中有某些内容,它也会将其视为空的 var quotes = []; var authors = []; function loadJSON(callback) { var xobj = new XMLHttpRequest(); xobj.overrideMimeType("application/json");

所以我要做的是从一个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";
var quotes=[];
var=[];
函数loadJSON(回调){
var xobj=新的XMLHttpRequest();
重写emimetype(“application/json”);
open('GET','quotes.json',true);
xobj.onreadystatechange=函数(){
if(xobj.readyState==4&&xobj.status==200){
//要求使用匿名回调as.open将不会返回值,而只是在异步模式下返回未定义的值
回调(xobj.responseText);
}
};
xobj.send(空);
}
函数init(){
loadJSON(函数(响应){
//将JSON字符串解析为对象
var data=JSON.parse(响应);
用于(数据中的var i){
var-key=i;
var val=数据[i];
按(键);
推送(val);
}
});
}
init();
var index=Math.floor(Math.random()*(quotes.length+1));

document.getElementById(“p1”).innerHTML=“&ldquo;”+引号[index]+“+”+“+”–“+作者[index]+”我认为您的问题在于,在
init
中的工作实际完成之前,您正在执行代码的最后两行(调用
init
函数之后的代码)


换句话说,将回调传递到
init
,就像您对
加载JSON
所做的那样,然后执行其中的最后2行。

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


这与您的问题无关,但是在
中使用
对于…是无效的,因为,如果您使用的是巴贝尔,
对于
,或者如果您使用的是巴贝尔,
对于
,也是您的最后一个
@Xufox,谢谢,这只是一个复制粘贴错误尝试将最后两行放在init中function@Ayudh成功了,谢谢!该死看来我被打败了,哈哈,我会尝试用它无效谢谢