我遇到以下代码问题:
var pageviews = [
[1, 0]
];
$.get("http://bla..bla",
function(res){
pageviews.push([2, res.value]);
}, "json");
我已检查过综合浏览量变量,但数组未更新。我可以在我的控制台上看到“res.value”。那么问题是什么?
答案 0 :(得分:2)
最有可能的是,您在错误的位置检查pageviews
阵列。 Liky任何Ajax操作,默认情况下.get()
异步工作,这意味着你不能在.get()
调用后检查该数组,并期望数据已经更新。
事实上,它不是,因为浏览器和网络需要一段时间才能完成数据传输。如果您立即检查您的阵列,在.push()
调用后,我保证阵列已按预期更新。
$.get( /* ... */ );
console.log( pageviews ); // wrong result, the array was not even touched at this point
您可能会发现jQuerys隐式 promise对象很有帮助,您可以像
一样使用它$.get( /* ... */ ).done(function( res ) {
pageviews.push([2, res.value]);
console.log(pageviews);
});
这就像你已经做的那样完全相同,但它的语法可能更方便。 “ done()”的事情应该让它变得非常清楚。
当然,你也可以混淆那些东西(无论出于何种原因),比如
$.get("http://bla..bla", function(res){
pageviews.push([2, res.value]);
}, "json").done(function() {
console.log( pageviews );
});
答案 1 :(得分:0)
如果您在致电pageviews
后直接查看$.get
,则99%的时间都没有任何变更。这是因为请求是异步的(而不是同步的)意味着它发生在后台并让Javascript的主线程继续执行。
在此处尝试console.log
:
$.get("http://bla..bla",
function(res){
pageviews.push([2, res.value]);
console.log(pageviews); //<-- This will log the updated value to the console
}, "json");