javascript变量和异步调用
我有下面的代码,读过之后,我明白它不起作用,因为getJSON调用是异步的。我需要如何更改此设置,以便使用全套标记触发MarkerClusterer函数?我尝试将MarkerClusterer函数放入getJSON调用中,但没有成功javascript变量和异步调用,javascript,json,asynchronous,Javascript,Json,Asynchronous,我有下面的代码,读过之后,我明白它不起作用,因为getJSON调用是异步的。我需要如何更改此设置,以便使用全套标记触发MarkerClusterer函数?我尝试将MarkerClusterer函数放入getJSON调用中,但没有成功 var mcOptions = {gridSize: 50, maxZoom: 9}; var markers = []; function parse_json(json) { if (json.length > 0) { for (i=0;
var mcOptions = {gridSize: 50, maxZoom: 9};
var markers = [];
function parse_json(json) {
if (json.length > 0) {
for (i=0; i<json.length; i++) {
var report = json[i];
var latLng = new google.maps.LatLng(report.latitude, report.longitude);
markers[i] = new google.maps.Marker({
position: latLng,
title: report.name + ' ' + report.surf_size_ft_round,
url: "/place/"+report.slug
});
google.maps.event.addListener(markers[i], 'click', function() {
window.location.href = markers[i].url;
});
markers.push(markers[i]);
}
}
};
$.getJSON('<%= request.fullpath + ".json" %>', function(stream) {
if (stream.length > 0) {
parse_json(stream);
alert(markers[1].title); //sanity check - gives result
}
});
alert(markers[5].title); // sanity check - empty
var mc = new MarkerClusterer(map, markers, mcOptions);
var mcOptions={gridSize:50,maxZoom:9};
var标记=[];
函数parse_json(json){
如果(json.length>0){
对于(i=0;i=0){
解析json(流);
警报(标记[1]。标题);//健全性检查-给出结果
}
});
警报(标记[5]。标题);//健全性检查-空
var mc=新标记聚类器(地图、标记、mcOptions);
为什么不把这个代码片段放进去:
mc = new MarkerClusterer(map, markers, mcOptions);
在$.getJSON中的匿名回调函数中,只需在$.getJSON范围之外的某个地方声明var mc;
,就可以在其他地方访问它
或者,您可以在parse_json
函数的末尾触发一个事件,侦听该事件,然后在触发事件时触发另一个创建MarkerClusterer对象的函数。请检查以下内容:
编辑:
在进一步检查代码之后,我可以看到您将markers[I]设置为一个新的Marker实例,然后将该实例推到markers数组上或者您想创建一个
var Marker
,将其设置为一个新的Marker实例,然后推动markers数组。也许您需要将其放入success函数中,作为$.getJSON的输入
$.getJSON('<%= request.fullpath + ".json" %>', function(stream) {
if (stream.length > 0) {
parse_json(stream);
alert(markers[1].title); //sanity check - gives result
mc = new MarkerClusterer(map, markers, mcOptions);
}
});
alert(markers[5].title); // sanity check - empty
$.getJSON(“”,函数(流){
如果(stream.length>0){
解析json(流);
警报(标记[1]。标题);//健全性检查-给出结果
mc=新标记聚类器(地图、标记、mcOptions);
}
});
警报(标记[5]。标题);//健全性检查-空
在回调中创建MarkerClusterer时会出现什么问题?如果重用它,请不要忘记在外部声明var mc。我已经尝试过了,它运行时没有错误,但没有生成程序出现。是不是因为映射已经在这个阶段生成了,太晚了?嗨,Vinay。我尝试将MarkerClusterer作为建议,它在控制台中运行时没有出现错误,但没有创建标记。这是因为在映射已加载后调用MarkerClusterer吗?不,这可能不是原因。可以事先创建映射。在这种情况下,可能是代码中的其他内容。请看一些示例:等等,我只是在重复我知道您正在将markers[i]设置到一个新的Marker实例上,然后也将其推到该实例上。这是故意的吗?这可能是您的问题。您希望每次都通过执行以下操作创建一个新的Marker:var Marker=new google.maps.Marker……然后将其推到markers数组上。我会尝试,尽管警报(markers[1].title)已发出;健全性检查给出了预期的结果,因此我不确定这是否是问题所在。我按照建议尝试了此操作,但仍然没有成功。我尝试在MarkerClusterer函数开始时添加并发出警报(opt_markers[1].title);该功能有效-因此正在调用该函数,但标记未放置在地图上。。。