无法将带有JSON对象的变量传递给for循环

时间:2016-12-05 17:25:03

标签: javascript json ajax

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

  

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

PS。它必须在原始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);
        }
    }
}

1 个答案:

答案 0 :(得分:3)

问题是你在获取数据之前调用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();



    }