在变量的值之前得到输出的变量由函数更新
variable getting output before it's value is updated by a function
我有下面的代码,在$.ajax()回调更新变量之前输出变量的初始值。似乎"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)
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调用有机会完成之前运行。
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();
UPDATE:这就是我所说的使用promise的意思。有关更多信息,请参阅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)
});
好吧,我想我不能让它像预想的那样工作。我添加了一个完整的函数,但它看起来像是一种变通。这种做法合理吗?谢谢。
相关文章:
- 如何在jQuery中将函数的输出分配给变量
- Javascript未在其中一个变量上输出0
- 在javascript函数中记录输出或分配的变量
- 如何将JSON数据转换为变量,解析并输出为HTML
- href-Javascript中的输出变量
- 如何避免JavaScript中函数输出上的多个变量重新声明
- 将 JSP 变量输出到 JavaScript 代码段中
- 将变量和输出添加到 html
- 你能把jQuery函数的输出放在变量中吗?
- 如何将javascript变量输出到控制台
- 我将如何编写考虑多个单选按钮和变量输出的 JavaScript,具体取决于选择的单选按钮
- 如何在网站上使用 BeautifulSoup 或 Slimit 从 javascript 变量输出电子邮件地址
- 如何在 VueJS 0.11 中将布尔变量输出为“是/否”
- 在MVC3中;关闭条件编译“;将Model变量输出到JavaScript时发出警告
- 如何获得一个变量's输出html值
- 获取Angularjs变量输出
- 使用Javascript将URL变量输出到字符串,然后在iframe中使用该字符串
- 脚本标签中的变量输出
- 基于变量输出图片's编号
- Javascript函数中的PHP变量输出的是变量而不是值