您的位置:首页 > 其它

百度批量坐标转换,当多个类调用不同的回调函数时,执行相同的回调函数。

2014-01-09 13:44 155 查看
百度批量坐标转换,当多个类调用不同的回调函数时,执行相同的回调函数。究竟是什么原因造成的呢,首先看看百度给我们的地址转换文件changeMore.js中transMore()方法部分
//2011-7-25 zhangying
(function(){
function load_script(xyUrl, callback){
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = xyUrl;
//借鉴了jQuery的script跨域方法
script.onload = script.onreadystatechange = function(){
if((!this.readyState || this.readyState === "loaded" || this.readyState === "complete")){
callback && callback();
// Handle memory leak in IE
script.onload = script.onreadystatechange = null;
if ( head && script.parentNode ) {
head.removeChild( script );
}
}
};
// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
head.insertBefore( script, head.firstChild );
}
function transMore(points,type,callback){
var xyUrl = "http://api.map.baidu.com/ag/coord/convert?from=" + type + "&to=4&mode=1";
var xs = [];
var ys = [];
var maxCnt = 20;//每次发送的最大个数
var send = function(){
var url = xyUrl + "&x=" + xs.join(",") + "&y=" + ys.join(",") + "&callback=callback";
//动态创建script标签
load_script(url);
xs = [];
ys = [];
}
for(var index in points){
if(index % maxCnt == 0 && index != 0){
send();
}
xs.push(points[index].lng);
ys.push(points[index].lat);
if(index == points.length - 1){
send();
}
}

}
window.BMap = window.BMap || {};
BMap.Convertor = {};
BMap.Convertor.transMore = transMore;
})();
请注意第29行字体部分,它是把"&callback=callback",他在这里已经把传入的方法写死了,所以当多个类调用不同的回调函数时,执行相同的回调函数callback.应该把此处的"&callback=callback"改为"&callback=”+callback然后当在调用transMore(points,type,callback)时,callback要用引号标起来,因为传入的函数名字是个字符串。transMore(points,2,”callback”)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  百度 批量 坐标转换