如何使用Javascript实时搜索/过滤解析的JSON数据?

如何使用Javascript实时搜索/过滤解析的JSON数据?,javascript,json,parsing,search,filter,Javascript,Json,Parsing,Search,Filter,我试图创建一个实时搜索字段,用Javascript过滤解析的JSON数据。JSON数据正以我希望的方式呈现在HTML和CSS中,但实时过滤不起作用 我是新来的,所以这可能是显而易见的,但我尝试了&在网上找不到答案,我被卡住了。我很难调用数据来过滤它-至少我认为这是问题所在 HTML: <input type="text" placeholder="Search" id="filter_listings"/> <section> </section>

我试图创建一个实时搜索字段,用Javascript过滤解析的JSON数据。JSON数据正以我希望的方式呈现在HTML和CSS中,但实时过滤不起作用

我是新来的,所以这可能是显而易见的,但我尝试了&在网上找不到答案,我被卡住了。我很难调用数据来过滤它-至少我认为这是问题所在

HTML:

<input type="text" placeholder="Search" id="filter_listings"/>
<section>   
</section>

Javascript:

var requestURL = 'atf.json';
var request = new XMLHttpRequest();
request.open('GET', requestURL);
request.responseType = 'text';
request.send();
request.onload = function() {
    var directoryText = request.response;
    var directory = JSON.parse(directoryText);
    render_listings(directory);

}

var render_listings = function(jsonObj){   


    var listings = jsonObj['eateries']; 
    for(var i = 0; i < listings.length; i++) {

// where the html template is rendered & linked to JSON data  
        var myWrapper = document.createElement('div'); 
        var myHeading = document.createElement('h1');  
        myHeading.textContent = listings[i].name;    
        section.appendChild(myWrapper).className = "wrapper"; 
        myWrapper.appendChild(myHeading).className = "heading";    
//etc       
}
    var filterListings = function(event){
        keyword = input.value.toLowerCase();
        var filtered_listings = listings.filter(function(user){
            user = user.toLowerCase();
            return user.indexOf(keyword) > -1; 
        });

        render_listings(filtered_listings);
    }  

// filtering it
    input = document.getElementById('filter_listings');
    input.addEventListener('keyup', filterListings); 
}
var requestURL='atf.json';
var request=new XMLHttpRequest();
打开('GET',requestURL);
request.responseType='text';
request.send();
request.onload=函数(){
var directoryText=request.response;
var directory=JSON.parse(directoryText);
呈现列表(目录);
}
var render_listings=函数(jsonObj){
var listings=jsonObj['eateries'];
对于(var i=0;i-1;
});
呈现_列表(过滤的_列表);
}  
//过滤它
输入=document.getElementById('filter_listings');
input.addEventListener('keyup',filterListings);
}
这一行是它中断的地方:
user=user.toLowerCase()控制台显示
用户。toLowerCase
是一个类型错误,不是函数


我只是不知道如何将它链接到JSON数据。我试过目录、jsonObj、餐馆和列表。我也尝试过在
onload
函数中将过滤代码移动到
listings
for循环下方的不同位置,但我得到了相同的错误。

在编写代码时考虑使用适当的缩进-这将使读取代码和识别错误变得更容易(对您和其他人都是如此),您似乎正在尝试调用
列表。在定义
列表之前先筛选
。谢谢。我已经编辑了这个片段以进一步缩进。我已经尝试过在调用
列表后放入筛选代码(我刚刚又尝试了一次),但仍然出现了错误,所以我认为我还做错了其他事情。我还意识到错误在下一行
user=user.toLowerCase(),我的问题出错了。我已经更新了代码,以便在定义了
listings
之后更新。