如何从consumer.query()获取数据?

时间:2017-04-20 21:33:04

标签: javascript socrata soda

我想使用HTML,Javascript和Socrata开发一个简单的网页。

我写这个页面:

    <body>
    <script src="../lib/soda-js.bundle.js"></script>
    <script>
        var consumer = new soda.Consumer('dati.lombardia.it');
        consumer.query()
            .withDataset('mmyz-duph')
            .limit(100)
            .where({ localita : "Suzzara" })
            .getRows()
                .on('success', function(rows) { console.log(rows); alert('Ok'); })
                .on('error', function(error) { console.error(error); alert('Ci sono problemi'); });



        var righe = consumer.query()
                        .withDataset('mmyz-duph')
                        .limit(100)
                        .where({ localita : "Suzzara" })
                        .getRows();

        /*
            --- Don't work! ---
        for (item in righe) {
            document.write("Email: ");
            document.write(item.email);
            document.write('<br>');
        };
        */

        document.write('<br>');
        document.write('Ho finito di elaborare i dati');
    </script>
</body>

在Suzzara(一个意大利小城市)有一个化学家的商店列表,我想写电子邮件地址(有5个商店)。 来自Firefox的consolle:我看到1个数组(5个对象)=&gt;行。

如何显示电子邮件的地址? 例: 电子邮件:pippo@email.com ...... ...... ......

1 个答案:

答案 0 :(得分:0)

首先,JavaScript的“for-in”循环遍历数组的键(read more here),而不是数组的每个元素。

其次,你的JS正在执行一个AJAX调用,所以你的当前for循环将在你从Socrata获得数据之前执行,所以没有什么可以循环的。这就是使用.on()函数的原因,因此您可以在返回数据后执行代码。

var consumer = new soda.Consumer('dati.lombardia.it');
consumer.query()
  .withDataset('mmyz-duph')
  .limit(100)
  .where({ localita : "Suzzara" })
  .getRows()
  .on('success', function(rows) {
    // since you're using a for-in loop, this is how it'd work
    for (i in rows) {
      console.log(rows[i]['email']);
    }
  })
  .on('error', function(error) { console.error(error); });