2017-06-26 5 views
0

Ich möchte einen Api Aufruf zu einem JSON (https://maps.googleapis.com/maps/api/geocode/json?address=Pune), indem Sie ihm einen Stadtnamen (hart codiert) und erhalten die Breite und Länge im Gegenzug. Ich habe den unten angegebenen Code versucht.Javascript json api call

function loadJSON(callback) { 

    var xobj = new XMLHttpRequest(); 
    xobj.overrideMimeType("application/json"); 
    xobj.open("GET", "https://maps.googleapis.com/maps/api/geocode/json?address=Pune", true); 
    xobj.onreadystatechange = function() { 
    if (xobj.readyState == 4 && xobj.status == "200") { 
     // Required use of an anonymous callback as .open will NOT return a value but simply returns undefined in asynchronous mode 
     callback(xobj.responseText); 
    }; 
    xobj.send(); 
    } 

    function init() { 
    loadJSON(function(response) { 
     // Parse JSON string into object 
     var myObj = JSON.parse(this.responseText); 

     alert(myObj.results[0].geometry.bounds.northeast.lat); 
     alert(myObj.results[0].geometry.bounds.northeast.lng); 
     alert(myObj.results[0].geometry.bounds.southwest.lat); 
     alert(myObj.results[0].geometry.bounds.southwest.lng); 
     alert(myObj.results[0].geometry.location.lat); 
     alert(myObj.results[0].geometry.location.lng); 

     alert(myObj.results[0].geometry.viewport.northeast.lat); 
     alert(myObj.results[0].geometry.viewport.northeast.lng); 
     alert(myObj.results[0].geometry.viewport.southwest.lat); 
     alert(myObj.results[0].geometry.viewport.southwest.lng); 

    }); 
    } 
+0

Sie einige Code geteilt haben, aber Sie haben nicht beschrieben, welches Problem Sie haben. Gibt es einen Fehler? Siehst du die Ausgabe? Ist die Ausgabe anders als erwartet? – smarx

+0

Sieht auch so aus, als ob du eine schließende geschweifte Klammer für 'loadJSON' verpasst hast. Ist das der genaue Code, den Sie ausführen möchten? – smarx

+0

Ihr 'xobj.send()' ist auch an der falschen Stelle. – smarx

Antwort

0

Es gab ein paar Probleme im Code:

  1. Sie wurden für loadJSON die schließende geschweiften Klammer fehlen.
  2. xobj.send() war an der falschen Stelle ... es muss außerhalb der onreadystatechange Funktion sein.
  3. Sie wurden mit this.responseText in Ihrem Rückruf anstelle des Parameters Sie nebenbei wurden.

ich diese Probleme behoben, konvertiert die alert s console.log s, und wurde von der unnötigen overrideMimeType Anruf befreien. Code zu arbeiten, ist unten:

function loadJSON(callback) { 
 

 
    var xobj = new XMLHttpRequest(); 
 
    xobj.open("GET", "https://maps.googleapis.com/maps/api/geocode/json?address=Pune", true); 
 
    xobj.onreadystatechange = function() { 
 
    if (xobj.readyState == 4 && xobj.status == "200") { 
 
     callback(xobj.responseText); 
 
    }; 
 
    } 
 
    xobj.send(); 
 
} 
 

 
function init() { 
 
    loadJSON(function(responseText) { 
 
     var myObj = JSON.parse(responseText); 
 

 
     console.log(myObj.results[0].geometry.bounds.northeast.lat); 
 
     console.log(myObj.results[0].geometry.bounds.northeast.lng); 
 
     console.log(myObj.results[0].geometry.bounds.southwest.lat); 
 
     console.log(myObj.results[0].geometry.bounds.southwest.lng); 
 
     console.log(myObj.results[0].geometry.location.lat); 
 
     console.log(myObj.results[0].geometry.location.lng); 
 

 
     console.log(myObj.results[0].geometry.viewport.northeast.lat); 
 
     console.log(myObj.results[0].geometry.viewport.northeast.lng); 
 
     console.log(myObj.results[0].geometry.viewport.southwest.lat); 
 
     console.log(myObj.results[0].geometry.viewport.southwest.lng); 
 

 
    }); 
 
} 
 

 
init();

+0

Danke Smarx !! :) Ich muss auch wissen, ob es einen Weg gibt, wo ich einen der Breiten- und Längengrade als Argumente übergeben kann und sie dann benutze, um die formatierte Adresse aus dem JSON zu erhalten. – SylieC