繁体   English   中英

$ .getJSON函数在所有其他操作之后执行

[英]$.getJSON function executed after everything else

我正在使用以下代码:

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中使用了“ address”变量后,将执行$ .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地图”信息窗口中未显示任何内容)。 我认为我应该能够将'event'传递给JSON内部的函数,但是我不知道如何实现这一点。

尝试这个:

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
});

您应该使用$ .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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM