2017-06-26 34 views
0

我想通過傳遞一個城市名稱(硬編碼)來獲取經緯度作爲回報,從而對JSON(https://maps.googleapis.com/maps/api/geocode/json?address=Pune)進行api調用。我嘗試了下面提到的代碼。Javascript json API調用

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

你共享一些代碼,但是你有沒有描述您遇到什麼問題。有錯誤嗎?你看到輸出了嗎?輸出是否與預期不同? – smarx

+0

此外,看起來你錯過了一個'loadJSON'的大括號。這是你正在嘗試運行的確切代碼嗎? – smarx

+0

你的'xobj.send()'也在錯誤的地方。 – smarx

回答

0

有在你的代碼的幾個問題:

  1. 你失蹤了loadJSON右大括號。
  2. xobj.send()在錯誤的地方......它需要在onreadystatechange函數之外。
  3. 你在你的回調,而不是你傳入參數使用this.responseText

我固定的這些問題,轉換的alert s到console.log s,而擺脫了不必要的overrideMimeType通話。工作代碼如下:

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

謝謝smarx! :)另外,我需要知道是否有一種方法可以將緯度和經度值之一作爲參數傳遞,然後使用它們從JSON中獲取格式化地址。 – SylieC