2017-06-30 4 views
-1

で記事の指定された数を埋めるために、純粋なJavaScriptでJSONデータをループ私の説明や質問に、次の次のコードを見つけてください:はHTML

私は12「結果」を生成するmyjson.comを使用しています。これらの「結果」は、12のクライアントで構成され、それぞれに異なるデータビットが関連付けられています。例えば、

クライアント1: 姓 - ジェームズ、

住所 - 1234メープルストリート

クライアント2: 姓 - ジャック、

住所 - 4321 Loremのイプサムレーン

私の質問: JavaScriptとAjaxリクエストでForループを使用して、JSONデータで次の12個の記事をHTMLに埋め込むにはどうすればよいですか?

<article> 
     <img class="photo" height="100" width="100"> 
     <hgroup> 
      <h1 class="name"></h1> 
      <h2 class="email"></h2> 
     </hgroup> 
    </article> 

    <article> 
     <img class="photo" height="100" width="100"> 
     <hgroup> 
      <h1 class="name"></h1> 
      <h2 class="email"></h2> 
     </hgroup> 
    </article> 

    <article> 
     <img class="photo" height="100" width="100"> 
     <hgroup> 
      <h1 class="name"></h1> 
      <h2 class="email"></h2> 
     </hgroup> 
    </article> 

    <article> 
     <img class="photo" height="100" width="100"> 
     <hgroup> 
      <h1 class="name"></h1> 
      <h2 class="email"></h2> 
     </hgroup> 
    </article> 

    <article> 
     <img class="photo" height="100" width="100"> 
     <hgroup> 
      <h1 class="name"></h1> 
      <h2 class="email"></h2> 
     </hgroup> 
    </article> 

    <article> 
     <img class="photo" height="100" width="100"> 
     <hgroup> 
      <h1 class="name"></h1> 
      <h2 class="email"></h2> 
     </hgroup> 
    </article> 

    <article> 
     <img class="photo" height="100" width="100"> 
     <hgroup> 
      <h1 class="name"></h1> 
      <h2 class="email"></h2> 
     </hgroup> 
    </article> 
    <article> 
     <img class="photo" height="100" width="100"> 
     <hgroup> 
      <h1 class="name"></h1> 
      <h2 class="email"></h2> 
     </hgroup> 
    </article> 

    <article> 
     <img class="photo" height="100" width="100"> 
     <hgroup> 
      <h1 class="name"></h1> 
      <h2 class="email"></h2> 
     </hgroup> 
    </article> 

    <article> 
     <img class="photo" height="100" width="100"> 
     <hgroup> 
      <h1 class="name"></h1> 
      <h2 class="email"></h2> 
     </hgroup> 
    </article> 

    <article> 
     <img class="photo" height="100" width="100"> 
     <hgroup> 
      <h1 class="name"></h1> 
      <h2 class="email"></h2> 
     </hgroup> 
    </article> 

    <article> 
     <img class="photo" height="100" width="100"> 
     <hgroup> 
      <h1 class="name"></h1> 
      <h2 class="email"></h2> 
     </hgroup> 
    </article>* 



` const Employees = (function() { 


let displayStudent = document.querySelector('.photo'); 
let name = document.querySelector('.name'); 
let email = document.querySelector('.email'); 
let phone = document.querySelector('.phone'); 
let streetAddress = document.querySelector('.streetAddress'); 
let city = document.querySelector('.city'); 
let state = document.querySelector('.state'); 
let zip = document.querySelector('.zip'); 

const ajaxCall = function() { 
    let hr = new XMLHttpRequest(); 
    let url = 'https://api.myjson.com/bins/zfhmr'; //https://randomuser.me/api/ 
    // myjson.com 
    hr.onreadystatechange = function() { 

     if (hr.readyState === 4) { //ajax is complete 
      if (hr.status === 200) { //successful network exchange 

       let myObj = JSON.parse(hr.responseText); 
       for(let i = 0; i < myObj.length; i++) { 
       displayStudent.src = myObj.results[0].picture.large; 
       name.innerHTML = myObj.results[0].name.first + " " + myObj.results[0].name.last; 
       } 
       console.log(myObj[i]); 

       /* 
       email.innerHTML = myObj.results[0].email; 
       phone.innerHTML = myObj.results[0].phone; 
       streetAddress.innerHTML = myObj.results[0].location.street; 
       city.innerHTML = myObj.results[0].location.city; 
       state.innerHTML = myObj.results[0].location.state; 
       zip.innerHTML = myObj.results[0].location.postcode; 
       */ 



      } 
     } else { 
      console.log("ajax error: " + hr.response); 
     } 
    }; 

    hr.open("GET", url, true); 
    hr.send(); 

    console.log(hr); 


}; 
return { 
    init: function() { 
     ajaxCall(); 
    } 
}; 

}()); 

Employees.init(); ` 

当時は1つのクライアントに1つ以上の記事を設定するのに問題があります。どんな助けでも大歓迎です!

+0

あなたは2つのクライアントの行を持っていて、1つのクライアントとの最初の12件の記事を移入したいし、他のまたは6とと1つのクライアントと6つのクライアント? –

答えて

0

私はあなたのJSON応答に確認したときに、私はあなたのコード例では奇妙な何かを参照してください。

あなたjson応答が

{ 
    "results": [...] 
} 

あなたのforループは次のようになり

...あなたのコード内ので
  • let myObj = JSON.parse(hr.responseText); 
    for(let i = 0; i < myObj.length; i++) { 
        displayStudent.src = myObj.results[0].picture.large; 
        name.innerHTML = myObj.results[0].name.first + " " + 
        myObj.results[0].name.last; 
    } 
    
      、あなたがループにしようとしている...このようになりますオブジェクト( .lengthプロパティも含まれていません)。この場合、 myObjは配列リストではありません。

    • myObj.results[0]は常に最初の結果を返します。


    ソリューション

    あなたは動的にforループ内htmlの要素を注入する必要があります。

    <!-- In your HTML file --> 
    <div id="articleContainer"></div> 
    

    // In your javascript ajax response (success) 
    if (hr.readyState === 4 && hr.status === 200) { // ajax is complete and successful network exchange 
        let container = document.querySelector('#articleContainer'); 
        let strArticles = ""; 
    
        let myObj = JSON.parse(hr.responseText); 
        for(let i = 0; i < myObj.results.length; i++) { 
         let resObj = myObj.results[i]; 
    
         strArticles += '<article>' + 
              '<img class="photo" src="' + resObj.picture.large + '" height="100" width="100">' + 
              '<hgroup>' + 
               '<h1 class="name">' + resObj.name.first + ' ' + name.last + '</h1>' + 
               '<h2 class="email">' + resObj.email + '</h2>' + 
              '</hgroup>' + 
             '</article>'; 
        } 
    
        // Inject the string html into the container parent element. 
        container.innerHTML = strArticles; 
    } 
    

    希望、これはあなたのために動作します:)

  • +0

    これはとてもうまく動作します。あなたは私に多くの欲求不満の夜を救った。私が作った一つの訂正は、最後の名前に関するものでした。最後の名前を生成するために "resObj.name.last"を挿入しました。さもなければ、すべてが正しく機能する! –

    +0

    あなたは歓迎です:)おっと、ええ、あなたは正しいです。愚かな間違い:P –

    0

    あなたの「I」変数は、あなたのforループの範囲外だったありがとう、そして巣if文をしないでください。また、繰り返しのHTMLスニペットにデータを取り込もうとする場合は、セレクタを使用して個々の要素をすべて照会する代わりに、テンプレートを使用してそれを吐き出すことを検討することもできます。

    const Employees = (function() { 
     
        let displayStudent = document.querySelector('.photo'); 
     
        let name = document.querySelector('.name'); 
     
        let email = document.querySelector('.email'); 
     
        let phone = document.querySelector('.phone'); 
     
        let streetAddress = document.querySelector('.streetAddress'); 
     
        let city = document.querySelector('.city'); 
     
        let state = document.querySelector('.state'); 
     
        let zip = document.querySelector('.zip'); 
     
    
     
        const ajaxCall = function() { 
     
        let hr = new XMLHttpRequest(); 
     
        let url = 'https://api.myjson.com/bins/zfhmr'; //https://randomuser.me/api/ 
     
        // myjson.com 
     
        hr.onreadystatechange = function() { 
     
         if (hr.readyState === 4 && hr.status === 200) { //ajax is complete 
     
         //successful network exchange 
     
    
     
         let myObj = JSON.parse(hr.responseText); 
     
         for (let i = 0; i < myObj.length; i++) { 
     
          displayStudent.src = myObj.results[0].picture.large; 
     
          name.innerHTML = myObj.results[0].name.first + " " + myObj.results[0].name.last; 
     
    
     
          console.log(myObj[i]); 
     
    
     
          /* 
     
          email.innerHTML = myObj.results[0].email; 
     
          phone.innerHTML = myObj.results[0].phone; 
     
          streetAddress.innerHTML = myObj.results[0].location.street; 
     
          city.innerHTML = myObj.results[0].location.city; 
     
          state.innerHTML = myObj.results[0].location.state; 
     
          zip.innerHTML = myObj.results[0].location.postcode; 
     
          */ 
     
    
     
    
     
         } 
     
    
     
         } else { 
     
         console.log("ajax error: " + hr.response); 
     
         } 
     
        }; 
     
    
     
        hr.open("GET", url, true); 
     
        hr.send(); 
     
    
     
        console.log(hr); 
     
    
     
    
     
        }; 
     
        return { 
     
        init: function() { 
     
         ajaxCall(); 
     
        } 
     
        }; 
     
    
     
    })(); 
     
    
     
    Employees.init();
    <article> 
     
        <img class="photo" height="100" width="100"> 
     
        <hgroup> 
     
        <h1 class="name"></h1> 
     
        <h2 class="email"></h2> 
     
        </hgroup> 
     
    </article> 
     
    
     
    <article> 
     
        <img class="photo" height="100" width="100"> 
     
        <hgroup> 
     
        <h1 class="name"></h1> 
     
        <h2 class="email"></h2> 
     
        </hgroup> 
     
    </article> 
     
    
     
    <article> 
     
        <img class="photo" height="100" width="100"> 
     
        <hgroup> 
     
        <h1 class="name"></h1> 
     
        <h2 class="email"></h2> 
     
        </hgroup> 
     
    </article> 
     
    
     
    <article> 
     
        <img class="photo" height="100" width="100"> 
     
        <hgroup> 
     
        <h1 class="name"></h1> 
     
        <h2 class="email"></h2> 
     
        </hgroup> 
     
    </article> 
     
    
     
    <article> 
     
        <img class="photo" height="100" width="100"> 
     
        <hgroup> 
     
        <h1 class="name"></h1> 
     
        <h2 class="email"></h2> 
     
        </hgroup> 
     
    </article> 
     
    
     
    <article> 
     
        <img class="photo" height="100" width="100"> 
     
        <hgroup> 
     
        <h1 class="name"></h1> 
     
        <h2 class="email"></h2> 
     
        </hgroup> 
     
    </article> 
     
    
     
    <article> 
     
        <img class="photo" height="100" width="100"> 
     
        <hgroup> 
     
        <h1 class="name"></h1> 
     
        <h2 class="email"></h2> 
     
        </hgroup> 
     
    </article> 
     
    <article> 
     
        <img class="photo" height="100" width="100"> 
     
        <hgroup> 
     
        <h1 class="name"></h1> 
     
        <h2 class="email"></h2> 
     
        </hgroup> 
     
    </article> 
     
    
     
    <article> 
     
        <img class="photo" height="100" width="100"> 
     
        <hgroup> 
     
        <h1 class="name"></h1> 
     
        <h2 class="email"></h2> 
     
        </hgroup> 
     
    </article> 
     
    
     
    <article> 
     
        <img class="photo" height="100" width="100"> 
     
        <hgroup> 
     
        <h1 class="name"></h1> 
     
        <h2 class="email"></h2> 
     
        </hgroup> 
     
    </article> 
     
    
     
    <article> 
     
        <img class="photo" height="100" width="100"> 
     
        <hgroup> 
     
        <h1 class="name"></h1> 
     
        <h2 class="email"></h2> 
     
        </hgroup> 
     
    </article> 
     
    
     
    <article> 
     
        <img class="photo" height="100" width="100"> 
     
        <hgroup> 
     
        <h1 class="name"></h1> 
     
        <h2 class="email"></h2> 
     
        </hgroup> 
     
    </article>

    enxampleは次のようになります。

    // blah blah blah ajax call blah blah blah fetch, blah blah blah something else that brings me data 
     
    
     
    //data comes back as something to iter through 
     
    var data = [{ 
     
        email: 'something' 
     
    }, { 
     
        email: 'something2' 
     
    }, { 
     
        email: 'blah' 
     
    }, { 
     
        email: 'blah2' 
     
    }, { 
     
        email: 'blah blah' 
     
    }, { 
     
        email: ':o blah' 
     
    }] 
     
    
     
    
     
    data.forEach(item => { 
     
        var div = document.createElement('div') 
     
        div.innerHTML = `<div>some fancy box//// ${item.email} \\\\\\some more facy box</div>` 
     
    
     
        document.body.appendChild(div); 
     
    })

    +1

    @JamesCraneLewisIIさらに助けが必要な場合、または理解していないことがある場合はお知らせください。 – Rick