2016-12-22 4 views
2

Wie können in der Konsole die Werte eines JSOP-Objekts in meiner Konsole gedruckt werden. Wenn ich versuche, den Namen des Landes mit var countries = data.name zu finden, druckt undefined in der Konsole. Ich habe bemerkt, dass die Tags im JSONP-Objekt Zahlen sind. Ich frage mich, ob ich eine Route mit diesen Zahlen schreiben muss, aber wenn ich es versuche, funktioniert es auch nicht.Wie können in der Konsole die Werte eines JSOP-Datensatzes der Weltbank gedruckt werden?

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> 
+0

in der Callback-Funktion 'var Getdata = Funktion (Daten) {' - Daten ist ein Javascript-Array, nicht etwas, das Sie eine 'JSONP-Datei 'nennen ... nur eine einfache ol' Javascript-Array, die Sie wie jedes andere Javascript manipulieren können Array –

+0

Danke für die Korrektur. Meine Frage ist nun, wie ich es manipuliere. Ich habe die Objekte in der Konsole, aber ich habe versucht, eine Variable zu erstellen: –

+0

Wenn Sie die Daten betrachten, die Sie erhalten, ist es ein Array, und im Array gibt es ein Objekt an der Position 0 - und ein Array von Objekten an der Position 1 ... und keines der Objekte hat eine Eigenschaft mit dem Namen 'name' –

Antwort

0

Ein Blick auf die Daten,

[ 
    // 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 
    ] 
] 

eine Liste der Länder zu bekommen

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

Natürlich sind Sie nur eine Liste der ersten 50 Länder bekommen In diesem Fall müssten Sie diese API mit einem Parameter aufrufen, um die nächsten 5 Seiten zu erhalten (Sie haben Seite 1 von 6)

so

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 

Need auch

Hier abgerufen werden ist ein Weg, Sie alle rufen

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); 
     } 
    }; 
})(); 

Länder abrufen können nur

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

Danke, das hat wirklich für mich funktioniert. Sehr geschätzt. –

+0

@ CésarBarboza - Ich habe Code hinzugefügt, der auch die nächsten 5 Seiten lesen wird, dann wird ein mitgelieferter Rückruf mit den Ergebnissen ALLER 6 Seiten aufgerufen –

+0

Vielen Dank, das hat bei mir funktioniert. Prost. @ JaromandaX –

Verwandte Themen