Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:如何在不使用fetchapi一次又一次地调用API的情况下过滤UI上的数据?_Javascript_Fetch Api - Fatal编程技术网

Javascript:如何在不使用fetchapi一次又一次地调用API的情况下过滤UI上的数据?

Javascript:如何在不使用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

当用户在输入框中键入并点击搜索按钮时,我希望根据用户界面上的数据进行过滤,即用户名是否以输入的文本开头。我不想一次又一次地调用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>

使用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>
    
    
  • 每次搜索时,只需执行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>
    
    
    下面是一个基于我所解释的功能片段

    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>