-2

我对以下代码有问题:

var pageviews = [
    [1, 0]
];            

$.get("http://bla..bla",
     function(res){
       pageviews.push([2, res.value]);
     }, "json"); 

我检查了 pageviews 变量,但数组没有更新。我可以在控制台上看到“res.value”。那么问题是什么?

4

2 回答 2

2

最有可能的是,您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 );
});
于 2013-04-26T14:08:10.823 回答
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"); 
于 2013-04-26T14:14:05.940 回答