我的問題是關於Javascript。 我有一個回調函數,它在成功的回調中接收一個Position對象。JavaScript將回調函數的返回值分配給全局變量
問題是,當我嘗試在成功的回調中將Position對象的屬性設置爲全局變量時,它只是不讓我這樣做,而且全局只是未定義。
作爲一種解決方法,而不是直接將對象屬性設置爲全局變量我試圖通過回調函數返回它,但我找不到方法將回調函數的返回值設置爲全局變量。
這是簡化的代碼。
var x;
navigator.geolocation.getCurrentPosition(onSuccess, onError);
//on Successful callback receives a Position Object
function onSuccess(position) {
var coords = position.coords;
x=coords; // Setting directly to an object does not work x still remains undefined after succesful callback
return coord; // Trying to set this to a global object
}
// onError Callback receives a PositionError object
//
function onError(error) {
alert('code: ' + error.code + '\n' +
'message: ' + error.message + '\n');
}
其實好點,我的回答是我的一個愚蠢的監督。代碼不是線性的,所以你需要在回調中做任何你想做的事情來確保值已經綁定 – WickyNilliams
你確實是對的。getCurrentPosition函數試圖獲取異步的地理位置這就是爲什麼當我嘗試從全局變量訪問它時,它可能沒有設置並返回undefined.Isnt有辦法在異步函數完成它的工作後將變量賦值給返回值? –
@Torukojin:不,值得回到哪裏?如上所述,代碼異步運行。這就是爲什麼該值作爲參數傳遞給回調函數的原因,以便您可以使用它並根據需要執行任何操作。如果有可能「返回」這個值,那麼'getCurrentPosition'就可以做到這一點。但事實並非如此,因此你提供了一個回調。也許你會發現[這篇文章](http://felix-kling.de/blog/2011/01/14/how-to-return-data-from-an-ajax-call/)有助於理解問題(但我在寫作方面並不擅長)) –