Google Geocoder异步问题

我相信我遇到了地理编码器结果的时间问题。 请参阅下面的代码片段。

我基本上执行地理编码并获得结果。 然后我通过jQuery AJAX调用将结果传递给服务器端方法。 最后,该方法的结果返回一个JSON对象。 根据结果​​,我可能会或可能不会执行第二个地理编码。 这就是问题所在。

您可以看到我将变量hasResult默认为false,并在确定有效结果时切换为true。 在所有情况下,这都是完美的,除非需要第二个地理编码。 地理编码成功发生并且代码执行,但最终的hasResult检查仍然返回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'); } 

谢谢

这是因为从服务器获取结果之前检查hasResult的值。 发生这种情况,因为请求是异步的。 你应该使用回调。

编辑:

试试这个(这只是一个模型,没有经过测试,更改它以提高可读性,将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 } }); } }); }); } }); } });