我有以下代码在$ .ajax()回调更新之前输出my变量的初始化值。似乎' get'在记录变量之后执行,尽管代码是如何写入的。我怎么能纠正这个?感谢您的任何建议。
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)
答案 0 :(得分:0)
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
};
取消注释成功回调中的记录器。否则,日志可能会在ajax调用有机会完成之前运行。
答案 1 :(得分:0)
Ajax调用是异步的。我猜你在控制台看到0
了吗?
将console.log
放入成功功能中。但我建议传递一个回调或返回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();
更新:这就是我使用诺言的意思。有关详细信息,请参阅Deferred Object和jQuery.ajax() documentation
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)
});
答案 2 :(得分:0)
好吧,我想我无法按照设想让它发挥作用。我添加了一个完整的功能,但它似乎是一种解决方法。这是一种合理的做法吗?谢谢。