我的问题是关于 Javascript 的。 我有一个回调函数,它在成功回调时接收一个 Position 对象。
问题是,当我尝试在成功回调时将 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');
}
最佳答案
您不能从回调中返回值(在本例中)。这意味着在 getCurrentPosition
内部,回调的返回值必须分配到某处。
将其分配给全局变量是可行的,但在您访问该变量时,尚未为其分配新值。例如
// x is assigned in `onSuccess`
var x;
navigator.geolocation.getCurrentPosition(onSuccess, onError);
alert(x); // will be undefined, the response is not processed yet
想一想:getCurrentPosition
可能正在执行 Ajax 请求以获取位置。这样的请求需要 (a) 时间(几毫秒),因此 (b) 是异步,这意味着 JavaScript 不会等待直到收到响应。您的代码方式更快。当您提醒 x
时,尚未调用 onSuccess
。
唯一的解决办法:
所有必须访问位置的代码才能在回调中或从回调中调用。
关于Javascript将回调函数的返回值分配给全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7189492/