如何显示从 RESTful API 调用 JavaScript 返回的 JSON

How do I display returned JSON from RESTful API call with JavaScript

解析 JSON 对象后,如何显示从 RESTful API 普通 JavaScript 调用返回的数据?

我是用数据创建 HTML 元素并将它们添加到页面,还是隐藏 HTML 元素和内部 HTML 返回的数据然后通过 CSS?

我决定最好的方法是在我的 html 底部创建一个 HTML 模板。这样我就可以减少我必须手动编码的 DOM 个元素的数量:

<script id="daily-template" type="text/template">
    <div class="xl-12">
        <h2 class="location"><?php echo $daily['name']; ?>, <?php echo $daily['sys']['country']; ?></h2>
        <img class="flag" />
    </div>
    <div class="xl-2 s-12 m-6 no-padding-top h140 text-center">
        <h3 class="description"></h3>
        <img class="icon" />
    </div>
    <div class="xl-2 s-12 m-6 no-padding-top h140 text-center">
        <h5>Current</h5>
        <h5 class="temp"></h5>
    </div>
    <div class="xl-2 s-6 m-3 text-center">
        <h5>Low</h5>
        <h5 class="min-temp"></h5>
    </div>
    <div class="xl-2 s-6 m-3 text-center">
        <h5>High</h5>
        <h5 class="max-temp"></h5>
    </div>
    <div class="xl-2 s-6 m-3 text-center">
        <h5>Humidity</h5>
        <h5 class="humidity"></h5>
    </div>
    <div class="xl-2 s-6 m-3 text-center">
        <h5>Wind</h5>
        <h5 class="wind"></h5>
    </div>
    <div class="clear"></div>
</script>

然后使用一些创意 Javascript 我:

  1. 缓存模板,
  2. 创建一个 DOM 元素来注入模板
  3. 插入数据
  4. 然后将模板附加到 DOM

/**
 * Display the results from API call
 */

// get the template
var dailyTemplate = document.getElementById('daily-template').innerHTML,
    // create an element to inject the template
    dailySite = document.createElement('div');

// inject the template
dailySite.innerHTML = dailyTemplate;

/** 
 * Inject the data to the template
 */

// location  
dailySite.getElementsByClassName('location')[0].innerHTML = current.name + ', ' + current.sys.country;

// flag
dailySite.getElementsByClassName('flag')[0].src = 'http://openweathermap.org/images/flags/' + current.sys.country.toLowerCase() + '.png';

// description 
dailySite.getElementsByClassName('description')[0].innerHTML = ucfirst(current.weather[0].description);

// weather icon
dailySite.getElementsByClassName('icon')[0].src = 'http://openweathermap.org/img/w/' + current.weather[0].icon + '.png';

// all other code omitted...

// append the template to the DOM
document.getElementById("search-results").appendChild(dailySite);