Ser*_*yol 14 javascript callback
我的问题是关于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');
}
Run Code Online (Sandbox Code Playgroud)
Fel*_*ing 15
您无法从回调中返回值(在本例中).这意味着在内部getCurrentPosition,必须在某处分配回调的返回值.
将其分配给全局变量有效,但在您访问该变量时,尚未为其分配新值.例如
// x is assigned in `onSuccess`
var x;
navigator.geolocation.getCurrentPosition(onSuccess, onError);
alert(x); // will be undefined, the response is not processed yet
Run Code Online (Sandbox Code Playgroud)
想一想:getCurrentPosition可能正在做一个Ajax请求来获得这个位置.这样的请求需要(a)时间(几毫秒),因此(b)是异步的,这意味着JavaScript 不会等到收到响应.您的代码的方式更快.onSuccess当你发出警报时,还没有打电话x.
唯一解决方案
所有必须访问该位置的代码都在回调中或从回调中调用.
| 归档时间: |
|
| 查看次数: |
29963 次 |
| 最近记录: |