我有一个函数,我正在调用一个返回JSON blob的MVC控制器,其中包含一些后端操作的内容。此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]
我尝试了一些其他配置(.getJSON(.complete),直接从$ .getJSON()中返回一个值,以尝试将回调中的'data'回显到封闭范围的blob变量,但是到目前为止,blob似乎只在getJSON回调中有价值。
话虽如此,我也知道JavaScript是一种词法范围的语言,所以它可能是所有匿名函数链的执行问题。
问题:我可以看到我的blob在$ .getJSON中正确显示。现在,我如何让我的blob出来?
答案 0 :(得分:1)
AJAX请求是异步的。您可以同步执行此操作(请注意,它会冻结您的网页,直到请求完成),但更好的做法是执行以下操作:
function getJsonFromController(path) {
var blob = null;
$.getJSON(path, function (data) {
blob = data;
console.log('inside getjson : ' + blob);
$.tmpl($template, blob).appendTo($('#table-body'));
});
}
然后点击:
$('#action-button').click(new function () {
blob = getJsonFromController('A/B?pageId=1');
});