Javascript中的异步函数调用
我的问题是,我不熟悉javascript。我有一个函数,可以对Google map API进行异步调用(返回基于latlng的位置)。在我的代码中,这个函数是MarkerCreaterPlusLocation。此调用返回另一个函数中所需的值,该函数在代码中名为MarkerCreater。但问题是,MarkerCreater并没有停止,以便MarkerCreaterPlusLocation返回值 为了克服这个问题,我尝试在异步函数返回值时使用MarkerCreater的回调来执行 结构如下:Javascript中的异步函数调用,javascript,google-maps-api-3,asynchronous,callback,Javascript,Google Maps Api 3,Asynchronous,Callback,我的问题是,我不熟悉javascript。我有一个函数,可以对Google map API进行异步调用(返回基于latlng的位置)。在我的代码中,这个函数是MarkerCreaterPlusLocation。此调用返回另一个函数中所需的值,该函数在代码中名为MarkerCreater。但问题是,MarkerCreater并没有停止,以便MarkerCreaterPlusLocation返回值 为了克服这个问题,我尝试在异步函数返回值时使用MarkerCreater的回调来执行 结构如下: go
google.maps.event.addListener(map, 'click',addLatLng); //This code attaches the function to Listener
function addLatLng(event) {
path = poly.getPath();
path.push(event.latLng);
MarkerCreaterPlusLocation(event.latLng,MarkerCreater);//MarkerCreater is the callback function
}
function MarkerCreaterPlusLocation(input,callback){
location="l";
geocoder.geocode({'latLng': input}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[1]) {
location=results[1].formatted_address;
callback(location,input);//I call the callback function upon the success of the result or otherwise
} else {
location="l";
callback(location,input);
}
} else {
location="l";
callback(location,input);
}
});
}
function MarkerCreater(l,x){
var marker = new google.maps.Marker({
position: x,
title: '#' + path.getLength()+l,
icon: 'images/beachflag.png',
map: map
});
///Some more javascript code
}
我想我在这里犯了错误,因为这似乎不起作用。相反,它给出了一个404错误,这使得我更难理解它。请帮助您的
位置
变量未使用var
声明,这意味着它在全局范围内(即窗口)。因此,设置location
实际上是设置window.location
,这会导致重定向到404
要解决此问题,请将MarkerCreaterPlusLocation函数的第一行更改为:
var location="l";
这将仅在函数范围内创建它,而不是在窗口中创建它 您的
位置
变量没有用var
声明,这意味着它在全局范围内(即窗口)。因此,设置location
实际上是设置window.location
,这会导致重定向到404
要解决此问题,请将MarkerCreaterPlusLocation函数的第一行更改为:
var location="l";
这将仅在函数范围内创建它,而不是在窗口中创建它 您的
位置
变量没有用var
声明,这意味着它在全局范围内(即窗口)。因此,设置location
实际上是设置window.location
,这会导致重定向到404
要解决此问题,请将MarkerCreaterPlusLocation函数的第一行更改为:
var location="l";
这将仅在函数范围内创建它,而不是在窗口中创建它 您的
位置
变量没有用var
声明,这意味着它在全局范围内(即窗口)。因此,设置location
实际上是设置window.location
,这会导致重定向到404
要解决此问题,请将MarkerCreaterPlusLocation函数的第一行更改为:
var location="l";
这将仅在函数范围内创建它,而不是在窗口中创建它 您有一个语法错误。。。但也许这只是一个复制/粘贴问题。感谢您指出错误,MarkerCreaterPlusLocation()中的
location=“l”
后面还有一个“s”。我已经改正了。是的,是复制粘贴错误你有语法错误。。。但也许这只是一个复制/粘贴问题。感谢您指出错误,MarkerCreaterPlusLocation()中的location=“l”
后面还有一个“s”。我已经改正了。是的,是复制粘贴错误你有语法错误。。。但也许这只是一个复制/粘贴问题。感谢您指出错误,MarkerCreaterPlusLocation()中的location=“l”
后面还有一个“s”。我已经改正了。是的,是复制粘贴错误你有语法错误。。。但也许这只是一个复制/粘贴问题。感谢您指出错误,MarkerCreaterPlusLocation()中的location=“l”
后面还有一个“s”。我已经改正了。是的,是复制粘贴错误谢谢!!s是复制粘贴错误。错误在于位置变量的声明。太好了。使用var
声明变量始终是一个好主意,以避免类似的问题,除非您真的想创建一个全局变量。仅供参考-这在Chrome中似乎不起作用。最好不要使用“location”作为变量。对于我来说,它在最新的Chrome/Mac中工作,当var声明在函数中时。但你是对的,最好不要使用它!谢谢s是复制粘贴错误。错误在于位置变量的声明。太好了。使用var
声明变量始终是一个好主意,以避免类似的问题,除非您真的想创建一个全局变量。仅供参考-这在Chrome中似乎不起作用。最好不要使用“location”作为变量。对于我来说,它在最新的Chrome/Mac中工作,当var声明在函数中时。但你是对的,最好不要使用它!谢谢s是复制粘贴错误。错误在于位置变量的声明。太好了。使用var
声明变量始终是一个好主意,以避免类似的问题,除非您真的想创建一个全局变量。仅供参考-这在Chrome中似乎不起作用。最好不要使用“location”作为变量。对于我来说,它在最新的Chrome/Mac中工作,当var声明在函数中时。但你是对的,最好不要使用它!谢谢s是复制粘贴错误。错误在于位置变量的声明。太好了。使用var
声明变量始终是一个好主意,以避免类似的问题,除非您真的想创建一个全局变量。仅供参考-这在Chrome中似乎不起作用。最好不要使用“location”作为变量。对于我来说,它在最新的Chrome/Mac中工作,当var声明在函数中时。但你是对的,最好不要使用它!