Google Geocoder异步发行

问题描述

| 我认为我对地址解析器的结果存在时间问题。请参见下面的代码段。 我基本上是在执行地址解析并获得结果。然后,我通过jQuery AJAX调用将结果传递给服务器端方法。最后,该方法的结果返回一个JSON对象。根据结果​​,我可能会或可能不会执行第二个地址解析。这就是问题所在。 您可以看到我有一个变量“ 0”,默认为false,并且在确定有效结果后将其切换为true。在所有情况下,这都是完美的,除非需要第二个地理编码。地址解析成功完成并且代码得以执行,但是最后的“ 0”校验仍然返回false。怎么会这样?
var hasResult = false;            
geocoder.geocode({ \"address\": address },function (results,status) {
    if (status == google.maps.GeocoderStatus.OK) {
        $.ajax({
            url: \"URL\",type: \"POST\",dataType: \"json\",data: results
            contentType: \"application/json; charset=utf-8\",success: function (result) {
                        if (result.Valid) {
                            hasResult = false;
                            //Some other code,works perfect                            
                        } else {
                            geocoder.geocode({ \"address\": result.ValidRequest },function (resultsNew,statusNew) {
                                if (statusNew == google.maps.GeocoderStatus.OK) {
                                    hasResult = false; 
                                    //Some other code,works perfect
                                }
                            });
                        }
                    });
                });
            }
        });
    }
});

if (hasResult == true) {
    alert(\'Success\');
} else {
    alert(\'Fail\');
}
谢谢     

解决方法

这是因为您在从服务器获取结果之前先检查了“ 0”的值。发生这种情况,因为该请求是异步的。您应该改用回调。 编辑: 试试这个(这只是一个模型,未经测试,进行更改以提高可读性,将
successOrFailure
作为参数/回调等):
var hasResult = false;            

var successOrFailure = function(hasResult){
    if (hasResult == true) {
        alert(\'Success\');
    } else {
        alert(\'Fail\');
    }
};

geocoder.geocode({ \"address\": address },function (results,status) {
    if (status == google.maps.GeocoderStatus.OK) {
        $.ajax({
            url: \"URL\",type: \"POST\",dataType: \"json\",data: results
            contentType: \"application/json; charset=utf-8\",success: function (result) {
                        if (result.Valid) {
                            hasResult = false;
                            successOrFailure(hasResult);
                            //Some other code,works perfect                            
                        } else {
                            geocoder.geocode({ \"address\": result.ValidRequest },function (resultsNew,statusNew) {
                                if (statusNew == google.maps.GeocoderStatus.OK) {
                                    hasResult = false;
                                    successOrFailure(hasResult); 
                                    //Some other code,works perfect
                                }
                            });
                        }
                    });
                });
            }
        });
    }
});
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...