【问题标题】:How can i acess results[0] in my json file function?如何在我的 json 文件函数中访问结果 [0]?
【发布时间】:2019-12-22 22:51:09
【问题描述】:

我正在使用一个链接来生成 3 个不同的结果,我试图在我的“contactos”函数中访问结果 [0]、结果 [1] 或结果 [2] 中的内容,但我不知道该怎么做它。我认为它可能必须在 For cicle 内,但它也不起作用。有人能帮我吗? (所有其他选择器都可以正常工作,但是在尝试使用 results[] 时它不起作用) 提前致谢。

getResultado();

function getResultado() {
    fetch("https://randomuser.me/api/?results=3")
        .then(function(response) {
            return response.json();
        }).then(function(json) {
        for (var i =0; i<json.results.length; i++) {
            console.log(json.results[i]);
            objeto = json.results[i];
            document.getElementById("json").appendChild(contactos(objeto));
        }
    });
}

function contactos(info){
        let contactosElement = document.createElement("div");
        contactosElement.classList.add("contactos");
        let contactoElement = document.createElement("div");
        contactoElement.classList.add("contacto");
        contactosElement.appendChild(contactoElement);
        let imagemElement = document.createElement("div");
        imagemElement.classList.add("imagem");
        contactoElement.appendChild(imagemElement);
        let textoElement = document.createElement("div");
        textoElement.classList.add("texto");
        contactoElement.appendChild(textoElement);
        let tituloElement = document.createElement("h3");
        tituloElement.innerText = "Geral";
        textoElement.appendChild(tituloElement);
        let nomeElement = document.createElement("p");
        nomeElement.innerText = "Nome: " + info.name.first;
        textoElement.appendChild(nomeElement);
        let mailElement = document.createElement("p");
        console.log(this.results[0].email);
        
        
        
        mailElement.innerText = "Email: " + info.results[0].email;
        
        
        
        
        textoElement.appendChild(mailElement);
        let telefoneElement = document.createElement("p");
        telefoneElement.innerText = "Telefone: " + info.phone;
        textoElement.appendChild(telefoneElement);
        let fotografiaElement = document.createElement("img");
        fotografiaElement.setAttribute('src', info.picture.large);
        imagemElement.appendChild(fotografiaElement);
        return contactosElement;

}

【问题讨论】:

  • 没有this.results;当您调用它时,您已经将json.results[i] 传递给contactos(),因此您需要info.email。调试的第一个顺序是记录您正在使用的东西。插入console.log(info),您将确切看到通过了什么。
  • 非常感谢,但是 json 文件传递​​了 3 封电子邮件,我想分别访问每封邮件,可以吗?
  • 您将数组中的每个结果传递给contactos - 所以,电子邮件将是info.email 就像它是info.name.first 等等......你所做的只是搞砸了你的方式从info 获取电子邮件...只需删除该行中的results[0]
  • 我明白,但该链接会生成 3 封电子邮件,它正在访问 onde 的所有 3 封电子邮件,我只想访问其中一封,这可能吗?
  • 当然:你有一个for循环遍历数组;如果您只想添加一个,请删除循环并将其替换为固定索引的代码。

标签: javascript json for-loop fetch


【解决方案1】:

这是对我的答案的重写,以完全适应您的想法。中心点是您需要遍历返回的json.results 数组的元素。我使用json.results.map() 完成了这项工作,为每个用户ujoin() 挑选了感兴趣的属性,将它们放入一个HTML 字符串中,然后我将其放入您页面的#json div 中。

getResultado();

function getResultado() {
  fetch("https://randomuser.me/api/?results=3")
  .then(r=>r.json())
  .then(json=>{
   document.getElementById("json").innerHTML=
   '<div "class=contacts">'+
   json.results.map(u=>
   `<div class="contacto">
     <div class="imagem">
      <img src="${u.picture.large}">
     </div>
     <div class="texto">
      <h3>Geral</h3>
      <p>${u.name.first} ${u.name.last}</p>
      <p>${u.phone}</p>
      <p>${u.email}</p>
     </div>
    </div>`).join('');
   });
}
<h2>Contactos</h2>
<div id="json"></div>

我使用 ES6 模板语法来生成新的 HTML 字符串。这比使用document.createElement()element.appendChild() 的原始方法更容易处理(而且速度更快)。

【讨论】:

  • 我想我不是很清楚,我想制作 3 个联系人 div,每个 div 有一封电子邮件、一个姓名、一个电话号码和一张照片。该链接可以生成多达 5000 个不同的“用户”及其所有数据,但我只需要 3 个。当链接生成 3 个“用户”时,它会生成 3 个不同的名称、3 个不同的电子邮件等。我想做的是加载3 个用户,因为它现在正在加载,但随后只能访问一个,所以我可以将此元素放在不同的联系人 div 中。你明白我的意思吗?
猜你喜欢
  • 2011-09-30
  • 1970-01-01
  • 2020-05-25
  • 2021-11-16
  • 2021-04-15
  • 2013-06-05
  • 1970-01-01
相关资源
最近更新 更多