1

我正在使用以下代码:

function eventListenerTest(event) {
    if (document.getElementById('gem_cvo_select_list')) {
        var address;
        $.getJSON(url, function (data) {
            address = data.rows[0];
            alert("This gets executed afterwards");
        });
        alert("This gets executed first");
        event.infoWindowHtml = "<b>Address: </b>" + address;
    }
}

问题是在 infoWindow 中使用“地址”变量后执行 $.getJSON 函数。修改代码如下:

function eventListenerTest(event) {
    if (document.getElementById('gem_cvo_select_list')) {
        var address;
        $.getJSON(url, function (data) {
            address = data.rows[0];
            event.infoWindowHtml = "<b>Address: </b>" + address;
        });
    }
}

似乎无法通过这种方式访问​​“事件”对象(Google 地图信息窗口中不显示任何内容)。我想我应该能够将“事件”传递给 JSON 中的函数,但我不知道如何实现这一点。

4

2 回答 2

0

尝试这个:

function eventListenerTest(event, callback) {
    if (document.getElementById('gem_cvo_select_list')) {
        var address;
        $.getJSON(url, function (data) {
            address = data.rows[0];
            event.infoWindowHtml = "<b>Address: </b>" + address;
            callback();
        });
    }
}

然后:

eventListenerTest(event, function(){
     // you will use updated event object here
});
于 2012-10-07T11:03:57.950 回答
0

您应该使用 $.proxy 方法来确保执行的回调函数保留创建 Ajax 调用的函数的上下文。

更新的 Javascript:

function eventListenerTest(event) {
    if (document.getElementById('gem_cvo_select_list')) {
        var address;
        $.getJSON(url, $.proxy(function (data) {
            address = data.rows[0];
            event.infoWindowHtml = "<b>Address: </b>" + address;
        },this));
    }
}

更多信息:http ://api.jquery.com/jQuery.proxy/

于 2012-10-07T11:14:24.323 回答