访问函数之外的jQuery变量



我需要在函数之外使用一个变量。我已经读过老问题了,但仍然找不到合适的解决方案。

这是代码:

<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>

警报显示"未定义"。我不仅需要在警报中获取该变量,还需要在就绪函数之外的另一个"仓库"值中获取该值。

如果是重复的话,我很抱歉,但正如我所说,我读到的答案不符合要求。

编辑:为了完整起见,我描述了详细信息,将警报替换为我必须调用的读取函数。

正如我在评论中所说,我实际上在使用谷歌地图API及其功能。我要做的是将变量传递到$(document).ready函数之外,因为我需要在外部脚本中使用它。

问题是,我必须调用的外部js函数是随着窗口加载而加载的Google Maps函数(initialize()),所以我必须在$ready函数之后找到调用该函数的方法。

因为@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);
}

看看这个:jquery中的自定义事件

这就是异步的含义。

在完成ajax请求之前,您将向warehouseLat发出警报。

你应该在request成功完成后再做!!

   $.ajax({
        type:"POST",
        url:"${pageContext.request.contextPath}/users/findWarehouseLat",  
        success:function(data){
            warehouseLat = data;
           alert(warehouseLat);
        }
    }); 

这是我通过@milkshake和其他善意用户的评论找到的解决方案。

首先,我把我所有的谷歌地图脚本放在一个外部.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. 谷歌监听器
  2. Ajax调用返回仓库地址
  3. 当我得到仓库地址时,我将其存储在warehouseAddress变量中,并对其进行地理编码(从地址字符串中提取坐标)
  4. 我调用谷歌地图初始化函数,这样我的变量就可以被它使用了

它有效。但还有更好的方法可以做到这一点,所以如果你有更好的解决方案,我很乐意阅读你的评论:)

相关内容

  • 没有找到相关文章

最新更新