我有一個函數,我正在調用一個MVC控制器,返回一個JSON blob和一些後端操作的內容。這個JSON blob被用來填充呈現給最終用戶的表格。從jQuery.getJSON返回一個JSON blob
我目前的功能看起來是這樣的:
function getJsonFromController(path) {
var blob = null;
$.getJSON(path, function (data) {
blob = data;
console.log('inside getjson : ' + blob);
});
console.log('outside getjson : ' + blob);
return blob;
}
...以及呼叫動作,看起來像這樣:
$('#action-button').click(new function() {
blob = getJsonFromController('A/B?pageId=1');
console.log('in click event: ' + blob);
$.tmpl($template, blob).appendTo($('#table-body'));
});
當我運行網頁/動作調用此,我得到下面的結果,在給定的順序:
outside getjson: null
in click event: null
inside getjson: [object Object]
我已經嘗試了一些其他配置( .complete .getJSON()直接從$ .getJSON()返回一個值,試圖將回調中的'data'回顯到封閉範圍的blob變量,但到目前爲止,blob只顯示其值getJSON回調。這就是說,我也知道JavaScript是一個詞彙範圍的語言,所以它可能是所有正在執行的匿名函數鏈的問題。
問題:我可以看到我的blob在$ .getJSON中正確顯示。現在,我如何讓我的blob出來?
這是一個* *異步機制**。 '$ .getJSON()'回調在'$ .getJSON()'本身返回後發生。 – Pointy
......至於如何做到這一點,那麼您不要將代碼帶到代碼中 - 您需要將代碼帶入代碼塊。在回調中處理它*。 – Pointy