我在这里做错了什么?我希望通过console.log获得新的啤酒价值,但是它一直在给我未定义这里已经尝试过有人可以帮我吗?
var beers;
function attached() {
var inquiryUrl = baseUrl + "/ProviderSingle?$top=8";
$.getJSON(inquiryUrl, function (viewModelFromServer) {
beers = JSON.stringify(viewModelFromServer.value);
});
}
console.log(beers);
答案 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);
});