【问题标题】:How can print in the console the values from a JSOP data set from the World Bank?如何在控制台中打印来自世界银行的 JSOP 数据集的值?
【发布时间】:2016-12-22 11:30:58
【问题描述】:

如何在控制台中打印我在控制台中拥有的 JSOP 对象的值。当我尝试使用 var countries = data.name 检索国家/地区名称时,控制台中将打印 undefined。我注意到 JSONP 对象中的标签是数字。我想知道是否必须使用这些数字编写路线,但是当我尝试这样做时,它也不起作用。

var Getdata = function(data) {
console.log(data)

var countries = data.name;
console.log(countries)

}

var url = 'http://api.worldbank.org/countries/all/indicators/DT.DOD.PVLX.CD?date=2015&format=jsonp&prefix=Getdata';

var query_url = url;
console.log(query_url);

var script = document.createElement('script');
script.src = query_url;
document.getElementsByTagName('head')[0].appendChild(script);
</script>

【问题讨论】:

  • 在回调函数var Getdata = function(data) { - 数据是一个javascript数组,而不是你称之为JSONP data set的东西......只是一个普通的ol'javascript数组,你可以像任何其他javascript数组一样操作
  • 感谢指正。我现在的问题是如何操作它。我在控制台中得到了对象,但我试图构建一个变量:
  • 如果你看一下你得到的数据,它是一个数组,在数组中,位置 0 有一个对象 - 位置 1 有一个对象数组......并且没有一个对象有一个名为 name 的属性
  • I tried to build a variable - 好吧data 有数据...如果你希望它是一个全局变量,你可以在回调中说window.someGlobal = data
  • 感谢指正。我现在的问题是如何操作它。我在控制台中获取了对象,但我尝试构建一个变量:var countries = data.name; console.log(countries) ,但在控制台中打印未定义,我如何实际获取国家/地区名称。

标签: javascript html xmlhttprequest


【解决方案1】:

查看数据,

[
    // this is data[0]
    {
        "page": 1,
        "pages": 6,
        "per_page": "50",
        "total": 264
    }, 
    // this is data[1]
    [
        // this is data[1][0]
        {
            "indicator": {
                "id": "DT.DOD.PVLX.CD",
                "value": "Present value of external debt (current US$)"
            },
            "country": {
                "id": "1A",
                "value": "Arab World"
            },
            "value": null,
            "decimal": "0",
            "date": "2015"
        }, 
        // data[1][1 ... 49] below here
        ... etc
    ]
] 

获取国家/地区列表

var countries = data[1].map(function(item) {
    return item.country.value;
});

当然,您只会在该结果中获得前 50 个国家/地区的列表,您需要使用一些参数调用该 API 以获取接下来的 5 页(您有第 1 页,共 6 页)

所以

http://api.worldbank.org/countries/all/indicators/DT.DOD.PVLX.CD?date=2015&format=jsonp&prefix=Getdata&page=2  
http://api.worldbank.org/countries/all/indicators/DT.DOD.PVLX.CD?date=2015&format=jsonp&prefix=Getdata&page=3
http://api.worldbank.org/countries/all/indicators/DT.DOD.PVLX.CD?date=2015&format=jsonp&prefix=Getdata&page=4
http://api.worldbank.org/countries/all/indicators/DT.DOD.PVLX.CD?date=2015&format=jsonp&prefix=Getdata&page=5
http://api.worldbank.org/countries/all/indicators/DT.DOD.PVLX.CD?date=2015&format=jsonp&prefix=Getdata&page=6

也需要检索

这是一种检索所有国家/地区的方法

var Getdata = (function() {
    var url = 'http://api.worldbank.org/countries/all/indicators/DT.DOD.PVLX.CD?date=2015&format=jsonp&prefix=Getdata';
    var allCountries = [];
    var callback;

    return function Getdata(data) {
        var hdr,
            arr, 
            countries;
        if (typeof data == 'function') {
            // called by code
            callback = data; // setup the callback
            allCountries = [];
        } else {
            // called by JSONP type callback
            hdr = data[0];
            arr = data[1];

            countries = arr.map(function(item) {
                return item.country.value;
            });
            allCountries = allCountries.concat(countries);
        }
        if (!hdr || hdr.page < hdr.pages) {
            // get the first (hdr is undefined) or next page
            var script = document.createElement('script');
            script.src = url + (hdr ? '&page=' + (hdr.page + 1) : '');
            document.getElementsByTagName('head')[0].appendChild(script);
        } else {
            // done, callback the countries
            callback(allCountries);
        }
    };
})();

刚刚的电话

Getdata(function(data) {
    console.log(data);
});

【讨论】:

  • 谢谢,这真的对我有用。真的很感激。
  • @CésarBarboza - 我添加了将读取接下来 5 页的代码,然后调用提供的回调,并使用所有 6 页的结果
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多