我已经阅读了有关此问题的Stack Overflow和其他地方的所有帖子,但似乎没有任何效果。我需要在他们被允许购买之前检索用户的信用。一切似乎都在工作到早些时候。这是我认为正在运行的代码:
function getCredits() {
return $.getJSON('users/getCredits').done(function(resp) {
return parseInt(resp.credits);
});
}
当我发现它没有按预期工作时,我尝试设置一个外部变量,.done()会修改。
function getCredits() {
var active_credits;
$.getJSON('users/getCredits'))
.done(function(resp) {
active_credits = parseInt(resp.credits);
});
return active_credits;
}
我也试过玩.when()和.then()方法,我对此并不熟悉。
function getCredits() {
$.when($.getJSON('users/getCredits'))
.then(function(resp) {
active_credits = parseInt(resp.credits);
});
}
我唯一能找到工作的是使用$ .ajax()并将async选项设置为false。但有了这个,我得到了一个弃用警告,而且我已经阅读了几个帖子,警告这是不好的做法。
任何有关此的帮助将不胜感激。我对.done()的假设一直等到HTTP请求完成处理。
所以这是我最近的尝试。我已按照本帖和其他帖子的建议传递回调。但是在尝试读取方法的返回值时,我仍然收到一条未定义的消息。我不确定我做错了什么。
function getCredits() {
var active_credits;
function requestCredits(callback) {
$.getJSON('users/getCredits', callback).done(function(resp) {
callback(resp);
});
}
requestCredits(function(resp) {
active_credits = parseInt(resp.credits);
});
return active_credits;
}
我也试过返回回调返回的值..没有运气。
function getCredits() {
var active_credits;
function requestCredits(callback) {
$.getJSON('users/getCredits', callback).done(function(resp) {
callback(resp);
});
}
return requestCredits(function(resp) {
return parseInt(resp.credits);
});
}
答案 0 :(得分:3)
如果您正在做这样的事情var credits = getCredits();
其余的代码将继续执行,并且信用额度将不会达到预期目标。
最不复杂的解决方案是放弃getCredits()
并直接使用getJson
调用。类似下面的代码。
$.getJSON('users/getCredits').done(function(resp) {
var credits = resp.credits;
//the rest of your code that depends on credits.
});
如果你想保留getCredits()
,你可以做这样的事情。您总是必须进行回调,这只是javascript中异步的本质。这完全脱离了我的头脑。
function getCredits() {
return $.getJSON('users/getCredits');
}
//some other code that uses getCredits()
getCredits().done(function(resp){
var credits = resp.credits;
//the rest of your code that depends on credits.
});