Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何访问在事件侦听器中设置的全局变量?_Javascript_Asp.net_Events_Variables_Google Maps Api 3 - Fatal编程技术网

Javascript 如何访问在事件侦听器中设置的全局变量?

Javascript 如何访问在事件侦听器中设置的全局变量?,javascript,asp.net,events,variables,google-maps-api-3,Javascript,Asp.net,Events,Variables,Google Maps Api 3,我正在使用谷歌地图api V3。我需要获取地图的getsoutwest和getsoutwest边界的值。为此,需要触发“bounds_changed”事件以获取新值。这一切都很好,但是,我需要从事件外部访问这些值,并将其传递给服务器端函数(更具体地说,我不希望每次更改映射边界时都调用服务器端函数) 我的代码是: //Global var sw, nw, Searchbounds; function myFunc(){ google.maps.event.addListener(map, 'b

我正在使用谷歌地图api V3。我需要获取地图的
getsoutwest
getsoutwest
边界的值。为此,需要触发“bounds_changed”事件以获取新值。这一切都很好,但是,我需要从事件外部访问这些值,并将其传递给服务器端函数(更具体地说,我不希望每次更改映射边界时都调用服务器端函数)

我的代码是:

//Global
var sw, nw, Searchbounds;

function myFunc(){

google.maps.event.addListener(map, 'bounds_changed', function() {
        Searchbounds = map.getBounds();
        sw = Searchbounds.getSouthWest();
        ne = Searchbounds.getNorthEast();

    });

    CallServerSideWebService(sw.lat(), ne.lng(), ne.lat(), ne.lng());
}
执行此代码时,我收到错误消息
sw未定义


如果有人知道我如何用目前的方法解决这个问题;或者在不使用事件的情况下访问
getBounds()
函数,那么我将非常感激

我假设你实际上是在定义变量?它们在你的代码中被注释掉了

假设它们定义正确,它们可能不是您期望的类型-例如sw可能存在并填充,但可能没有
lat()
属性-可能是
latitude()

在边界更改后,尝试在调试器中检查sw对象(firefox中的firebug插件非常适合于此)

更改代码时进行编辑:

在调用边界更改函数之前,您正在调用服务器端函数

试试这个:

var sw, nw, Searchbounds;

function myFunc(){

google.maps.event.addListener(map, 'bounds_changed', function() {
        Searchbounds = map.getBounds();
        sw = Searchbounds.getSouthWest();
        ne = Searchbounds.getNorthEast();

        //Moved inside the event handler
        CallServerSideWebService(sw.lat(), ne.lng(), ne.lat(), ne.lng());

    });

}

我假设你真的在定义变量?它们在你的代码中被注释掉了

假设它们定义正确,它们可能不是您期望的类型-例如sw可能存在并填充,但可能没有
lat()
属性-可能是
latitude()

在边界更改后,尝试在调试器中检查sw对象(firefox中的firebug插件非常适合于此)

更改代码时进行编辑:

在调用边界更改函数之前,您正在调用服务器端函数

试试这个:

var sw, nw, Searchbounds;

function myFunc(){

google.maps.event.addListener(map, 'bounds_changed', function() {
        Searchbounds = map.getBounds();
        sw = Searchbounds.getSouthWest();
        ne = Searchbounds.getNorthEast();

        //Moved inside the event handler
        CallServerSideWebService(sw.lat(), ne.lng(), ne.lat(), ne.lng());

    });

}

对我来说,这似乎是一个时间问题,而不是范围问题

  • 函数激发并添加处理程序
  • 然后,它尝试访问未定义的sw(与声明时一样)
  • 然后事件可能会触发并设置sw
  • 我认为API可能正在更改单个对象引用,而您仍在保留该引用,但这似乎不太可能。如果是这种情况,请尝试存储lat和lng值,而不是nw和sw,因为它们是数字原语

    但是,您必须能够访问事件外部的映射。它看起来很简单:

    function myFunc() {
      var searchBounds = map.getBounds();
      var sw = searchBounds.getSouthWest();
      var ne = searchBounds.getNorthEast();
    
      CallServerSideWebService(sw.lat(), ne.lng(), ne.lat(), ne.lng());
    }
    

    对我来说,这似乎是一个时间问题,而不是范围问题

  • 函数激发并添加处理程序
  • 然后,它尝试访问未定义的sw(与声明时一样)
  • 然后事件可能会触发并设置sw
  • 我认为API可能正在更改单个对象引用,而您仍在保留该引用,但这似乎不太可能。如果是这种情况,请尝试存储lat和lng值,而不是nw和sw,因为它们是数字原语

    但是,您必须能够访问事件外部的映射。它看起来很简单:

    function myFunc() {
      var searchBounds = map.getBounds();
      var sw = searchBounds.getSouthWest();
      var ne = searchBounds.getNorthEast();
    
      CallServerSideWebService(sw.lat(), ne.lng(), ne.lat(), ne.lng());
    }
    

    谢谢你的重播。我需要sw&ne变量在事件范围外可访问。每次映射边界更改时,更新的代码都将调用函数“CallServerSideWebService”。简单地说,我需要在不使用事件的情况下填充sw&ne。好的,理解-但在这种情况下,您需要以某种方式提供默认值。换句话说,在第一个边界更改之前,它们中包含什么?只有在触发事件时才更新该值。事件前的值是默认值,在偶数期间更新,但在事件后返回默认值。在以前版本的GoogleMaps(v2)中,只需通过以下方式获取地图边界:Searchbounds=map.getBounds();如果不使用event.odd-这听起来像是一个范围问题,即它设置了一个局部而不是全局,但我以前没有遇到过这种行为-在设置之前,事件侦听器中的变量值是多少?你能读懂环球报吗?关于XSS保护或类似的保护,可能会有一些奇怪的事情发生——即google事件代码来自不同的域,因此无法访问您的DOM。这在所有浏览器中都会发生吗?如果没有,是哪一个?@user547043您提到了默认值,但我看不到您在任何地方设置了默认值。谢谢您的重播。我需要sw&ne变量在事件范围外可访问。每次映射边界更改时,更新的代码都将调用函数“CallServerSideWebService”。简单地说,我需要在不使用事件的情况下填充sw&ne。好的,理解-但在这种情况下,您需要以某种方式提供默认值。换句话说,在第一个边界更改之前,它们中包含什么?只有在触发事件时才更新该值。事件前的值是默认值,在偶数期间更新,但在事件后返回默认值。在以前版本的GoogleMaps(v2)中,只需通过以下方式获取地图边界:Searchbounds=map.getBounds();如果不使用event.odd-这听起来像是一个范围问题,即它设置了一个局部而不是全局,但我以前没有遇到过这种行为-在设置之前,事件侦听器中的变量值是多少?你能读懂环球报吗?关于XSS保护或类似的保护,可能会有一些奇怪的事情发生——即google事件代码来自不同的域,因此无法访问您的DOM。这在所有浏览器中都会发生吗?如果没有,是哪一个?@user547043您提到了默认值,但我看不到您在任何地方设置了默认值。您的代码看起来不正确-这就是您正在使用的代码吗?如果没有,请复制/粘贴准确的代码。