Javascript Can';t将带有JSON对象的变量传递给for循环

Javascript Can';t将带有JSON对象的变量传递给for循环,javascript,json,ajax,Javascript,Json,Ajax,我尝试编写脚本来循环对象,并返回那个些类型等于HTML中自定义数据类型集的类型。然而,我无法将带有对象数组的变量传递给我的for循环。你能告诉我我在这个代码中做错了什么吗?我收到: 无法读取未定义的属性“length” 它必须在原始JavaScript中完成,没有jQuery var btn = document.getElementById("btn"); var przepisy; function findData(data) { var kuchnia = data.datas

我尝试编写脚本来循环对象,并返回那个些类型等于HTML中自定义数据类型集的类型。然而,我无法将带有对象数组的变量传递给我的for循环。你能告诉我我在这个代码中做错了什么吗?我收到:

无法读取未定义的属性“length”

它必须在原始JavaScript中完成,没有jQuery

var btn = document.getElementById("btn");
var przepisy;

function findData(data) {
    var kuchnia = data.dataset.type;
    var myRequest = new XMLHttpRequest();

    myRequest.onreadystatechange = function() {
        if (this.readyState === 4 && this.status == 200) {

            przepisy = JSON.parse(myRequest.responseText);
        }
    };

    myRequest.open('GET', 'js/przepisy.json');
    myRequest.send();


    for (i = 0; i < przepisy.length; i++) {
        var results = "";
        var obj = przepisy[i];
        var type = przepisy.type;

        if (type === kuchnia) {

            results += obj.name;

            document.write(results);
        }
    }
}
var btn=document.getElementById(“btn”);
变量przepisy;
函数findData(数据){
var kuchnia=data.dataset.type;
var myRequest=new XMLHttpRequest();
myRequest.onreadystatechange=函数(){
if(this.readyState==4&&this.status==200){
przepisy=JSON.parse(myRequest.responseText);
}
};
myRequest.open('GET','js/przepisy.json');
myRequest.send();
对于(i=0;i
问题在于,在获取数据之前,您正在调用for循环,这就是长度为0的原因。您只需将for循环移动到响应中:

   function findData(data) {
        var kuchnia = data.dataset.type;
        var myRequest = new XMLHttpRequest();

           myRequest.onreadystatechange = function() {
            if (this.readyState === 4 && this.status == 200) {

                        przepisy = JSON.parse(myRequest.responseText);

                      for(i = 0; i < Object.keys(przepisy).length; i++) {
                           var results = "";
                           var obj = przepisy[i];
                           var type = przepisy.type;

                           if(type === kuchnia) {

                                results += obj.name;

                                 document.write(results);
                      }
                  }
            }
        };

        myRequest.open('GET','js/przepisy.json');
        myRequest.send();



    }
函数findData(数据){
var kuchnia=data.dataset.type;
var myRequest=new XMLHttpRequest();
myRequest.onreadystatechange=函数(){
if(this.readyState==4&&this.status==200){
przepisy=JSON.parse(myRequest.responseText);
for(i=0;i
问题在于,在获取数据之前,您正在调用for循环,这就是长度为0的原因。您只需将for循环移动到响应中:

   function findData(data) {
        var kuchnia = data.dataset.type;
        var myRequest = new XMLHttpRequest();

           myRequest.onreadystatechange = function() {
            if (this.readyState === 4 && this.status == 200) {

                        przepisy = JSON.parse(myRequest.responseText);

                      for(i = 0; i < Object.keys(przepisy).length; i++) {
                           var results = "";
                           var obj = przepisy[i];
                           var type = przepisy.type;

                           if(type === kuchnia) {

                                results += obj.name;

                                 document.write(results);
                      }
                  }
            }
        };

        myRequest.open('GET','js/przepisy.json');
        myRequest.send();



    }
函数findData(数据){
var kuchnia=data.dataset.type;
var myRequest=new XMLHttpRequest();
myRequest.onreadystatechange=函数(){
if(this.readyState==4&&this.status==200){
przepisy=JSON.parse(myRequest.responseText);
for(i=0;i
似乎
przepisy
未正确初始化。您可以验证吗?您正在尝试在异步操作完成之前访问其结果。首先,将您的循环包含在成功回调函数中,以便有一个对象可以查看。第二个:
przepisy=JSON.parse(myRequest.responseText)应返回一个对象,而不是数组。要了解对象中有多少属性,请使用
object.keys(przepisy).length
。或者,如果你真的想得到一个数组。您需要查看存储所查找数组的对象属性之一。似乎
przepisy
未正确初始化。您可以验证吗?您正在尝试在异步操作完成之前访问其结果。首先,将您的循环包含在成功回调函数中,以便有一个对象可以查看。第二个:
przepisy=JSON.parse(myRequest.responseText)应返回一个对象,而不是数组。要了解对象中有多少属性,请使用
object.keys(przepisy).length
。或者,如果你真的想得到一个数组。您需要查看对象的一个属性,该属性存储了您要查找的数组。并且,不要在对象上使用
.length
。使用:
Object.keys(przepisy).length
感谢您快速的回答,错误消失,但现在记录。write在运行函数时不要触发。根本没有结果。原因是什么?@ScottMarcus谢谢你的建议。我更新了答案。@Ganga
przepisy
不是一个对象数组。它是一个可能包含其他对象数组的对象。不要尝试索引对象,进入包含数组的属性并索引它。是的,你是对的:)我刚刚意识到这一点。不管怎样,我发现了问题所在。type应等于obj.type not przepisy.type谢谢您的帮助:)并且,不要在对象上使用
.length
。使用:
Object.keys(przepisy).length
感谢您快速的回答,错误消失,但现在记录。write在运行函数时不要触发。根本没有结果。原因是什么?@ScottMarcus谢谢你的建议。我更新了答案。@Ganga
przepisy
不是一个对象数组。它是一个可能包含其他对象数组的对象。不要尝试索引对象,进入包含数组的属性并索引它。是的,你是对的:)我刚刚意识到这一点。不管怎样,我发现了问题所在。类型应等于obj.type not przepisy.type谢谢您的帮助:)