【问题标题】:how to get a value inside a function [duplicate]如何在函数中获取值[重复]
【发布时间】:2014-02-27 19:04:58
【问题描述】:

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

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

console.log(beers);

【问题讨论】:

  • 调用是异步的,因此您在设置啤酒之前先登录。从回调中记录。
  • @kougiland 通过提供async:false 您的代码可能会起作用....
  • 你在你的函数中进行异步调用。使用thislink
  • @james async:false 无效 $.getJSON(inquiryUrl, async:false, function (viewModelFromServer) {
  • @kougiland 我忘了指定,你需要使用$.ajax 才能使用async$.getJSONajax 的简写版本,它不提供该属性。

标签: javascript jquery


【解决方案1】:

因为 $.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 调用需要 1 秒。警报将转到1,3,并且在此代码启动后 1 秒,异步 ajax 调用已准备就绪,并将提醒 2

【讨论】:

  • 我想在附件之外使用它,顺便说一句,我没有反对你回答
  • @kougiland 通过提供 async:false 你的代码可能会工作......
  • @kougiland - 你是否按照 Anoop Joshi 的建议获得了价值?
  • @NikhilButani:OP 想要将 console.log 放在 attached 函数之外。
  • @Nikhil Butani 是的,我得到了这样的价值,但这不是我想要的
【解决方案2】:

使用 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);
});

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-06-03
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多