Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript变量和异步调用_Javascript_Json_Asynchronous - Fatal编程技术网

javascript变量和异步调用

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;

我有下面的代码,读过之后,我明白它不起作用,因为getJSON调用是异步的。我需要如何更改此设置,以便使用全套标记触发MarkerClusterer函数?我尝试将MarkerClusterer函数放入getJSON调用中,但没有成功

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);该功能有效-因此正在调用该函数,但标记未放置在地图上。。。