0

我有一个函数,我正在调用一个返回 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() 返回一个值)以尝试将回调中的“数据”回显到封闭范围的 blob 变量,但到目前为止,该 blob 似乎仅在 getJSON 回调中具有价值。

话虽如此,我也知道 JavaScript 是一种词法范围的语言,所以它可能是所有匿名函数链正在执行的问题。

问题:我可以看到我的 blob 在 $.getJSON 中正确显示。现在,我该如何取出我的斑点?

4

1 回答 1

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');
});
于 2012-09-25T20:54:16.170 回答