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