我需要在其功能之外使用变量。我已经阅读了较旧的问题,但我仍然无法找到合适的解决方案。
以下是代码:
<script>
var warehouseAddress;
$(document).ready(function(){
$.ajax({
type:"POST",
url:"${pageContext.request.contextPath}/users/findWarehouseAddress",
success:function(data){
warehouseAddress = data;
}
});
alert(warehouseAddress);
});
var warehouse = warehouseAddress;
</script>
警报让我“未定义”。我需要不仅在警报内部,而且在准备函数之外的其他“仓库”值内部获取该变量。
很抱歉,如果它是重复的,但正如我所说,我无法用我读过的答案来表达。
编辑:为了完整起见,我描述了详细信息,用我必须调用的读取函数替换警报。
正如我在评论中所说,我实际上正在使用Google Maps API及其功能。我要做的是将变量传递到$(document).ready
函数之外,因为我需要在外部脚本中使用它。
问题是我必须调用的外部js函数是一个Google Maps函数(initialize()
),它在窗口加载时加载,所以我必须找到一种在$ ready之后调用该函数的方法功能
答案 0 :(得分:2)
因为@putvande已经说过ajax是异步的,所以这里最好的办法就是利用回调(基于事件:D)
$.ajax({
type:"POST",
url:"${pageContext.request.contextPath}/users/findWarehouseLat",
success: myDataHandler(data)
});
function myDataHandler(data){
warehouseLat = data;
//do something with the data here :D as it now exists
alert(warehouseLat);
}
看看这个: custom events in jquery
答案 1 :(得分:1)
这就是异步的意思。
在完成ajax请求之前,您正在提醒您warehouseLat
。
你应该在request
成功完成后做到!!
$.ajax({
type:"POST",
url:"${pageContext.request.contextPath}/users/findWarehouseLat",
success:function(data){
warehouseLat = data;
alert(warehouseLat);
}
});
答案 2 :(得分:0)
这是我发现的解决方案,感谢@milkshake和其他用户评论。
首先,我将所有Google地图脚本放在外部.js文件中。为了代码可读性,我需要这样做。
在该文件中,我只是使用Google Api的addDomListener函数在正确的时间加载我需要的东西,以避免ajax调用和方法执行之间的时间错误。
google.maps.event.addDomListener(window, 'load', function(){
$.ajax({
type:"POST",
url:contextPath+"/products/findWarehouseAddress",
success:function(data){
warehouseAddress = data;
geocoder.geocode({'address': warehouseAddress }, function(results) {
warehouse = results[0].geometry.location;
initialize();
});
}
});
});
所以时间是这样的:
有效。但是可以有更好的方法来做到这一点,所以如果你有更好的解决方案,我会很高兴看到你的评论:)