我对以下代码有问题:
var pageviews = [
[1, 0]
];
$.get("http://bla..bla",
function(res){
pageviews.push([2, res.value]);
}, "json");
我检查了 pageviews 变量,但数组没有更新。我可以在控制台上看到“res.value”。那么问题是什么?
我对以下代码有问题:
var pageviews = [
[1, 0]
];
$.get("http://bla..bla",
function(res){
pageviews.push([2, res.value]);
}, "json");
我检查了 pageviews 变量,但数组没有更新。我可以在控制台上看到“res.value”。那么问题是什么?
最有可能的是,您pageviews
在错误的位置检查了阵列。就像任何 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 );
});
如果您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");