Javascript:如何在不使用fetchapi一次又一次地调用API的情况下过滤UI上的数据?
当用户在输入框中键入并点击搜索按钮时,我希望根据用户界面上的数据进行过滤,即用户名是否以输入的文本开头。我不想一次又一次地调用APIJavascript:如何在不使用fetchapi一次又一次地调用API的情况下过滤UI上的数据?,javascript,fetch-api,Javascript,Fetch Api,当用户在输入框中键入并点击搜索按钮时,我希望根据用户界面上的数据进行过滤,即用户名是否以输入的文本开头。我不想一次又一次地调用API function searchData(){ let url = 'https://jsonplaceholder.typicode.com/users'; let data = document.getElementById("usersearch").value; //passing the username, user enter
function searchData(){
let url = 'https://jsonplaceholder.typicode.com/users';
let data = document.getElementById("usersearch").value;
//passing the username, user enters as a url to the showData function
url = url+"?username="+`${data}`;
showData(url);
}
function showData(url){
fetch(url)
.then(response => response.json())
.then(data => {
let out = '<h2 class = "mt-3 mb-3">Search Result</h2>';
data.forEach(user =>{
out += `
<ul class = "mylist card">
<li id = "myli" class = "card-body text-primary pl-3"> ${user.name} </li>
<li class = "card-body text-secondary"> ${user.email} </li>
<li id = "myli2" class = "card-body text-info"><a href = "https://${user.website}"> ${user.website} </a></li>
</ul>
`;
})
//Edit
document.getElementById("output").innerHTML = out;
})
.catch(err => console.log('Error : ',err.message))
}
//Edit
<button class = "btn btn-secondary" id = "btn1" onclick = "searchData()">Search</button>
使用JavaScriptFetchAPI概念,我尝试按用户名搜索,但每次搜索时它都会调用API
function searchData(){
let url = 'https://jsonplaceholder.typicode.com/users';
let data = document.getElementById("usersearch").value;
//passing the username, user enters as a url to the showData function
url = url+"?username="+`${data}`;
showData(url);
}
function showData(url){
fetch(url)
.then(response => response.json())
.then(data => {
let out = '<h2 class = "mt-3 mb-3">Search Result</h2>';
data.forEach(user =>{
out += `
<ul class = "mylist card">
<li id = "myli" class = "card-body text-primary pl-3"> ${user.name} </li>
<li class = "card-body text-secondary"> ${user.email} </li>
<li id = "myli2" class = "card-body text-info"><a href = "https://${user.website}"> ${user.website} </a></li>
</ul>
`;
})
//Edit
document.getElementById("output").innerHTML = out;
})
.catch(err => console.log('Error : ',err.message))
}
//Edit
<button class = "btn btn-secondary" id = "btn1" onclick = "searchData()">Search</button>
这就是我所做的
function searchData(){
let url = 'https://jsonplaceholder.typicode.com/users';
let data = document.getElementById("usersearch").value;
//passing the username, user enters as a url to the showData function
url = url+"?username="+`${data}`;
showData(url);
}
function showData(url){
fetch(url)
.then(response => response.json())
.then(data => {
let out = '<h2 class = "mt-3 mb-3">Search Result</h2>';
data.forEach(user =>{
out += `
<ul class = "mylist card">
<li id = "myli" class = "card-body text-primary pl-3"> ${user.name} </li>
<li class = "card-body text-secondary"> ${user.email} </li>
<li id = "myli2" class = "card-body text-info"><a href = "https://${user.website}"> ${user.website} </a></li>
</ul>
`;
})
//Edit
document.getElementById("output").innerHTML = out;
})
.catch(err => console.log('Error : ',err.message))
}
//Edit
<button class = "btn btn-secondary" id = "btn1" onclick = "searchData()">Search</button>
函数searchData(){
让url为空https://jsonplaceholder.typicode.com/users';
让data=document.getElementById(“usersearch”).value;
//通过用户名,用户以url的形式输入showData函数
url=url+“?用户名=“++${data}”;
showData(url);
}
函数showData(url){
获取(url)
.then(response=>response.json())
。然后(数据=>{
释放='搜索结果';
data.forEach(用户=>{
输出+=`
- ${user.name}
- ${user.email}
`;
})
//编辑
document.getElementById(“输出”).innerHTML=out;
})
.catch(err=>console.log('Error:',err.message))
}
//编辑
搜寻
我不想一次又一次地调用API或每次单击搜索按钮
function searchData(){
let url = 'https://jsonplaceholder.typicode.com/users';
let data = document.getElementById("usersearch").value;
//passing the username, user enters as a url to the showData function
url = url+"?username="+`${data}`;
showData(url);
}
function showData(url){
fetch(url)
.then(response => response.json())
.then(data => {
let out = '<h2 class = "mt-3 mb-3">Search Result</h2>';
data.forEach(user =>{
out += `
<ul class = "mylist card">
<li id = "myli" class = "card-body text-primary pl-3"> ${user.name} </li>
<li class = "card-body text-secondary"> ${user.email} </li>
<li id = "myli2" class = "card-body text-info"><a href = "https://${user.website}"> ${user.website} </a></li>
</ul>
`;
})
//Edit
document.getElementById("output").innerHTML = out;
})
.catch(err => console.log('Error : ',err.message))
}
//Edit
<button class = "btn btn-secondary" id = "btn1" onclick = "searchData()">Search</button>
编辑:
function searchData(){
let url = 'https://jsonplaceholder.typicode.com/users';
let data = document.getElementById("usersearch").value;
//passing the username, user enters as a url to the showData function
url = url+"?username="+`${data}`;
showData(url);
}
function showData(url){
fetch(url)
.then(response => response.json())
.then(data => {
let out = '<h2 class = "mt-3 mb-3">Search Result</h2>';
data.forEach(user =>{
out += `
<ul class = "mylist card">
<li id = "myli" class = "card-body text-primary pl-3"> ${user.name} </li>
<li class = "card-body text-secondary"> ${user.email} </li>
<li id = "myli2" class = "card-body text-info"><a href = "https://${user.website}"> ${user.website} </a></li>
</ul>
`;
})
//Edit
document.getElementById("output").innerHTML = out;
})
.catch(err => console.log('Error : ',err.message))
}
//Edit
<button class = "btn btn-secondary" id = "btn1" onclick = "searchData()">Search</button>
我使用onclick函数调用searchData()方法。您可以声明两个变量,一个用于存储整个用户列表,另一个用于根据输入和显示进行过滤
function searchData(){
let url = 'https://jsonplaceholder.typicode.com/users';
let data = document.getElementById("usersearch").value;
//passing the username, user enters as a url to the showData function
url = url+"?username="+`${data}`;
showData(url);
}
function showData(url){
fetch(url)
.then(response => response.json())
.then(data => {
let out = '<h2 class = "mt-3 mb-3">Search Result</h2>';
data.forEach(user =>{
out += `
<ul class = "mylist card">
<li id = "myli" class = "card-body text-primary pl-3"> ${user.name} </li>
<li class = "card-body text-secondary"> ${user.email} </li>
<li id = "myli2" class = "card-body text-info"><a href = "https://${user.website}"> ${user.website} </a></li>
</ul>
`;
})
//Edit
document.getElementById("output").innerHTML = out;
})
.catch(err => console.log('Error : ',err.message))
}
//Edit
<button class = "btn btn-secondary" id = "btn1" onclick = "searchData()">Search</button>
另外,当您分离fetch和UI时,您和其他开发人员会更加清楚。所以您必须重构showData()以分离这些进程
function searchData(){
let url = 'https://jsonplaceholder.typicode.com/users';
let data = document.getElementById("usersearch").value;
//passing the username, user enters as a url to the showData function
url = url+"?username="+`${data}`;
showData(url);
}
function showData(url){
fetch(url)
.then(response => response.json())
.then(data => {
let out = '<h2 class = "mt-3 mb-3">Search Result</h2>';
data.forEach(user =>{
out += `
<ul class = "mylist card">
<li id = "myli" class = "card-body text-primary pl-3"> ${user.name} </li>
<li class = "card-body text-secondary"> ${user.email} </li>
<li id = "myli2" class = "card-body text-info"><a href = "https://${user.website}"> ${user.website} </a></li>
</ul>
`;
})
//Edit
document.getElementById("output").innerHTML = out;
})
.catch(err => console.log('Error : ',err.message))
}
//Edit
<button class = "btn btn-secondary" id = "btn1" onclick = "searchData()">Search</button>
这里是过程=
function searchData(){
let url = 'https://jsonplaceholder.typicode.com/users';
let data = document.getElementById("usersearch").value;
//passing the username, user enters as a url to the showData function
url = url+"?username="+`${data}`;
showData(url);
}
function showData(url){
fetch(url)
.then(response => response.json())
.then(data => {
let out = '<h2 class = "mt-3 mb-3">Search Result</h2>';
data.forEach(user =>{
out += `
<ul class = "mylist card">
<li id = "myli" class = "card-body text-primary pl-3"> ${user.name} </li>
<li class = "card-body text-secondary"> ${user.email} </li>
<li id = "myli2" class = "card-body text-info"><a href = "https://${user.website}"> ${user.website} </a></li>
</ul>
`;
})
//Edit
document.getElementById("output").innerHTML = out;
})
.catch(err => console.log('Error : ',err.message))
}
//Edit
<button class = "btn btn-secondary" id = "btn1" onclick = "searchData()">Search</button>
function searchData(){
let url = 'https://jsonplaceholder.typicode.com/users';
let data = document.getElementById("usersearch").value;
//passing the username, user enters as a url to the showData function
url = url+"?username="+`${data}`;
showData(url);
}
function showData(url){
fetch(url)
.then(response => response.json())
.then(data => {
let out = '<h2 class = "mt-3 mb-3">Search Result</h2>';
data.forEach(user =>{
out += `
<ul class = "mylist card">
<li id = "myli" class = "card-body text-primary pl-3"> ${user.name} </li>
<li class = "card-body text-secondary"> ${user.email} </li>
<li id = "myli2" class = "card-body text-info"><a href = "https://${user.website}"> ${user.website} </a></li>
</ul>
`;
})
//Edit
document.getElementById("output").innerHTML = out;
})
.catch(err => console.log('Error : ',err.message))
}
//Edit
<button class = "btn btn-secondary" id = "btn1" onclick = "searchData()">Search</button>
function searchData(){
let url = 'https://jsonplaceholder.typicode.com/users';
let data = document.getElementById("usersearch").value;
//passing the username, user enters as a url to the showData function
url = url+"?username="+`${data}`;
showData(url);
}
function showData(url){
fetch(url)
.then(response => response.json())
.then(data => {
let out = '<h2 class = "mt-3 mb-3">Search Result</h2>';
data.forEach(user =>{
out += `
<ul class = "mylist card">
<li id = "myli" class = "card-body text-primary pl-3"> ${user.name} </li>
<li class = "card-body text-secondary"> ${user.email} </li>
<li id = "myli2" class = "card-body text-info"><a href = "https://${user.website}"> ${user.website} </a></li>
</ul>
`;
})
//Edit
document.getElementById("output").innerHTML = out;
})
.catch(err => console.log('Error : ',err.message))
}
//Edit
<button class = "btn btn-secondary" id = "btn1" onclick = "searchData()">Search</button>
function searchData(){
let url = 'https://jsonplaceholder.typicode.com/users';
let data = document.getElementById("usersearch").value;
//passing the username, user enters as a url to the showData function
url = url+"?username="+`${data}`;
showData(url);
}
function showData(url){
fetch(url)
.then(response => response.json())
.then(data => {
let out = '<h2 class = "mt-3 mb-3">Search Result</h2>';
data.forEach(user =>{
out += `
<ul class = "mylist card">
<li id = "myli" class = "card-body text-primary pl-3"> ${user.name} </li>
<li class = "card-body text-secondary"> ${user.email} </li>
<li id = "myli2" class = "card-body text-info"><a href = "https://${user.website}"> ${user.website} </a></li>
</ul>
`;
})
//Edit
document.getElementById("output").innerHTML = out;
})
.catch(err => console.log('Error : ',err.message))
}
//Edit
<button class = "btn btn-secondary" id = "btn1" onclick = "searchData()">Search</button>
下面是一个基于我所解释的功能片段
function searchData(){
let url = 'https://jsonplaceholder.typicode.com/users';
let data = document.getElementById("usersearch").value;
//passing the username, user enters as a url to the showData function
url = url+"?username="+`${data}`;
showData(url);
}
function showData(url){
fetch(url)
.then(response => response.json())
.then(data => {
let out = '<h2 class = "mt-3 mb-3">Search Result</h2>';
data.forEach(user =>{
out += `
<ul class = "mylist card">
<li id = "myli" class = "card-body text-primary pl-3"> ${user.name} </li>
<li class = "card-body text-secondary"> ${user.email} </li>
<li id = "myli2" class = "card-body text-info"><a href = "https://${user.website}"> ${user.website} </a></li>
</ul>
`;
})
//Edit
document.getElementById("output").innerHTML = out;
})
.catch(err => console.log('Error : ',err.message))
}
//Edit
<button class = "btn btn-secondary" id = "btn1" onclick = "searchData()">Search</button>
让用户=[];//用户列表
让usersFiltered=[]//您显示的用户
//您想获取所有不带过滤器的用户,并将其存储在您的用户变量中
函数fetchUsers(){
让url为空https://jsonplaceholder.typicode.com/users';
获取(url)
.then(response=>response.json())
。然后(数据=>{
用户=数据;
usersFiltered=用户;
showData();
}).catch(err=>console.log('Error:',err.message));
}
//那么这个函数只显示过滤过的用户
函数showData(){
释放='搜索结果';
usersFiltered.forEach(用户=>{
输出+=`
- ${user.name}
- ${user.email}
`;
});
document.getElementById('users').innerHTML=out;
}
//搜索数据将过滤您的输入
函数searchData(){
让data=document.getElementById(“usersearch”).value;
usersFiltered=users.filter(用户=>{
//这里我按名称筛选,但您可以实现所需的筛选
返回user.name.includes(数据);
});
showData();
}
fetchUsers();//在开始时获取用户
搜寻
客户端过滤从来都不是一个好主意。一般来说,您应该更喜欢服务器端过滤点击API可以保证正确的结果,而客户端过滤可能不。我写了一个与此类似的答案
function searchData(){
let url = 'https://jsonplaceholder.typicode.com/users';
let data = document.getElementById("usersearch").value;
//passing the username, user enters as a url to the showData function
url = url+"?username="+`${data}`;
showData(url);
}
function showData(url){
fetch(url)
.then(response => response.json())
.then(data => {
let out = '<h2 class = "mt-3 mb-3">Search Result</h2>';
data.forEach(user =>{
out += `
<ul class = "mylist card">
<li id = "myli" class = "card-body text-primary pl-3"> ${user.name} </li>
<li class = "card-body text-secondary"> ${user.email} </li>
<li id = "myli2" class = "card-body text-info"><a href = "https://${user.website}"> ${user.website} </a></li>
</ul>
`;
})
//Edit
document.getElementById("output").innerHTML = out;
})
.catch(err => console.log('Error : ',err.message))
}
//Edit
<button class = "btn btn-secondary" id = "btn1" onclick = "searchData()">Search</button>
阅读此处:您如何调用
searchData
?我正在使用onclick函数searchData()调用searchData(),填写后如何显示“out”内容?@MaximeGirou document.getElementById(“output”).innerHTML=out;好的,您可以查看我制作的代码片段;)
function searchData(){
let url = 'https://jsonplaceholder.typicode.com/users';
let data = document.getElementById("usersearch").value;
//passing the username, user enters as a url to the showData function
url = url+"?username="+`${data}`;
showData(url);
}
function showData(url){
fetch(url)
.then(response => response.json())
.then(data => {
let out = '<h2 class = "mt-3 mb-3">Search Result</h2>';
data.forEach(user =>{
out += `
<ul class = "mylist card">
<li id = "myli" class = "card-body text-primary pl-3"> ${user.name} </li>
<li class = "card-body text-secondary"> ${user.email} </li>
<li id = "myli2" class = "card-body text-info"><a href = "https://${user.website}"> ${user.website} </a></li>
</ul>
`;
})
//Edit
document.getElementById("output").innerHTML = out;
})
.catch(err => console.log('Error : ',err.message))
}
//Edit
<button class = "btn btn-secondary" id = "btn1" onclick = "searchData()">Search</button>