如何使用Javascript实时搜索/过滤解析的JSON数据?
我试图创建一个实时搜索字段,用Javascript过滤解析的JSON数据。JSON数据正以我希望的方式呈现在HTML和CSS中,但实时过滤不起作用 我是新来的,所以这可能是显而易见的,但我尝试了&在网上找不到答案,我被卡住了。我很难调用数据来过滤它-至少我认为这是问题所在 HTML:如何使用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>
<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
之后更新。