如何在函数中获取值

时间:2014-02-27 10:43:32

标签: javascript jquery

我在这里做错了什么?我希望通过console.log获得新的啤酒价值,但是它一直在给我未定义这里已经尝试过有人可以帮我吗?

var beers;
function attached() {
    var inquiryUrl = baseUrl + "/ProviderSingle?$top=8";
    $.getJSON(inquiryUrl, function (viewModelFromServer) {
        beers = JSON.stringify(viewModelFromServer.value);
    });
}

console.log(beers);

2 个答案:

答案 0 :(得分:2)

因为$ .getJSON是异步调用。它不会等待完整的事件发生。试试

function attached() {
var inquiryUrl = baseUrl + "/ProviderSingle?$top=8";
$.getJSON(inquiryUrl, function (viewModelFromServer) {
    beers = JSON.stringify(viewModelFromServer.value);
    console.log(beers);
});
}

异步意味着代码不在队列中执行(同步确实):

alert( 1 );
alert( 2 );
alert( 3 );

这些将始终1,2,3,它们是同步的。以下代码是异步的:

alert( 1 );
$.getJSON(inquiryUrl, function (data) { alert( 2 ); });
alert( 3 );

让我们说ajax-call需要1秒钟。此代码启动后,警报将显示1,3和1秒,async ajax-call已准备好并将提醒2

答案 1 :(得分:1)

使用promise正确更新值。

var beers;
var promise = null;
function attached() {
    var inquiryUrl = baseUrl + "/ProviderSingle?$top=8";
    promise = $.getJSON(inquiryUrl);
}

promise.done(function(data) {
    beers = JSON.stringify(data.value);
    console.log(beers);
});