在其函数之外访问jQuery变量

时间:2013-08-08 08:44:08

标签: jquery function google-maps variables global-variables

我需要在其功能之外使用变量。我已经阅读了较旧的问题,但我仍然无法找到合适的解决方案。

以下是代码:

<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之后调用该函数的方法功能

3 个答案:

答案 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();
                    });
        }
    });
});

所以时间是这样的:

  1. Google Listener;
  2. Ajax调用返回仓库地址;
  3. 当我获得仓库地址时,我将其存储在warehouseAddress变量中并对其进行地理编码(从地址字符串中提取坐标);
  4. 我称之为Google Maps初始化函数,以便我可以使用我的变量。
  5. 有效。但是可以有更好的方法来做到这一点,所以如果你有更好的解决方案,我会很高兴看到你的评论:)