[英]variable getting output before it's value is updated by a function
I have the following code that outputs the initialized value of my variable before it is updated by an $.ajax() callback. 我有以下代码,用于在$ .ajax()回调对其进行更新之前输出变量的初始化值。 It seems that the 'get' is performed after the variable is logged despite how the code is written. 尽管代码是如何编写的,但似乎在记录变量之后执行了“ get”操作。 How can I correct this? 我该如何纠正? Thanks for any suggestions. 感谢您的任何建议。
var statusUpdate = {
queries : [],
numQueries : 0,
getNumQueries : function(){
$.ajax({
type: 'get',
url: '40985839503175/planXML.txt',
cache: false,
error: function()
{
},
success: function(data){
statusUpdate.queries = $(data).find('query');
statusUpdate.numQueries = statusUpdate.queries.length;
//console.log(statusUpdate.numQueries);
}
});
} // end getNumQueries
};
statusUpdate.getNumQueries();
console.log(statusUpdate.numQueries)
var statusUpdate = {
queries : [],
numQueries : 0,
getNumQueries : function(){
$.ajax({
type: 'get',
url: '40985839503175/planXML.txt',
cache: false,
error: function()
{
},
success: function(data){
statusUpdate.queries = $(data).find('query');
statusUpdate.numQueries = statusUpdate.queries.length;
console.log(statusUpdate.numQueries);
}
});
} // end getNumQueries
};
Uncomment the logger in the success callback. 在成功回调中取消对记录器的注释。 Otherwise the log may run before the ajax call gets a chance to complete. 否则,日志可能会在ajax调用有机会完成之前运行。
Ajax calls are asynchronous. Ajax调用是异步的。 I'm guessing that you are seeing 0
in your console? 我猜您在控制台中看到0
?
Put the console.log
inside the success function. 将console.log
放入成功函数中。 But I'd recommend passing a callback or returning the promise object (it will require you to restructure your JavaScript). 但是我建议传递一个回调或返回promise对象(这将要求您重组JavaScript)。
var statusUpdate = {
queries : [],
numQueries : 0,
getNumQueries : function(){
$.ajax({
type: 'get',
url: '40985839503175/planXML.txt',
cache: false,
error: function()
{
},
success: function(data){
statusUpdate.queries = $(data).find('query');
statusUpdate.numQueries = statusUpdate.queries.length;
console.log(statusUpdate.numQueries)
}
});
} // end getNumQueries
};
statusUpdate.getNumQueries();
UPDATE : Here's what I meant by using a promise. 更新 :这就是我使用诺言的意思。 For more info, see Deferred Object and the jQuery.ajax() documentation 有关更多信息,请参见Deferred Object和jQuery.ajax()文档。
var statusUpdate = {
queries : [],
numQueries : 0,
getNumQueries : function(){
var deferred = new $.Deferred();
$.ajax({
type: 'get',
url: '40985839503175/planXML.txt',
cache: false
}).done(function(data){
statusUpdate.queries = $(data).find('query');
statusUpdate.numQueries = statusUpdate.queries.length;
deferred.resolve();
).fail(function () {
deferred.reject();
});
return deferred.promise();
} // end getNumQueries
};
statusUpdate.getNumQueries().done(function () {
console.log(statusUpdate.numQueries)
});
Ok, I guess I can't make it work as envisioned. 好的,我想我无法按预期进行。 I added a complete function but it seems like kind of a workaround. 我添加了一个完整的功能,但这似乎是一种解决方法。 Is this a reasonable practice? 这是合理的做法吗? Thanks. 谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.