2011-06-07 43 views
0

我有一個函數返回有效地址的座標,但即時通訊有一些困難,它是一個無效地址。 我希望得到pos1的空值,如果geocode找不到有效的地址,我在函數中設置該值。但是我得到了未定義的,我知道我在做一些非常愚蠢的事情,但只是不知道它是什麼。當值設置爲空時返回undefined的函數

function fnCalculate(){ 

var pos1=getCordinates(document.getElementById("address1").value)); 

alert(pos1); 

} 

function getCordinates(address){ 

    var loc;  

    if(address){ 
     geocoder.geocode({ 'address': address}, function(results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
       loc=results[0].geometry.location; 
      } 
     else { 
       loc=null; 
      } 

     }); 
    } 

    return loc; 

    } 

回答

2

您的問題是,直到「getCoordinates()」返回後,geocoder的回調函數纔會運行。您編寫的代碼的結構根本無法工作。不要期望「getCoordinates()」到返回東西,您需要編寫它,以便您傳遞另一個函數,以便在位置可用時進行調用。

喜歡的東西:

function getCoordinates(address, callback) { 

    if(address){ 
    geocoder.geocode({ 'address': address}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      callback(results[0].geometry.location); 
     } 
     else { 
      callback(null); 
     } 

    }); 
    } 
} 

然後,當你打電話給你的功能,你在通過另一函數處理結果:

getCoordinates(document.getElementById("address").value, function(loc) { 
    // 
    // ... do something with "loc" ... 
    // 
}); 
+1

[通用AJAX是異步鏈接](HTTP://問題/ 6009206/what-is-ajax-and-how-does-it-work) – Raynos 2011-06-07 12:45:28

+0

感謝您的答案,是否有可能將該結果返回給變量? – manraj82 2011-06-07 13:14:45

+0

不,不是真的。回調函數由該「.geocode()」方法調用,或者由其XHR回調函數間接調用,所以它不會關注你的返回值(除非它是爲了自己的目的)。異步環境要求您以與編寫普通程序代碼時不同的方式思考通過代碼的控制流。 – Pointy 2011-06-07 13:18:12