Jquery处理全局变量

时间:2013-04-26 14:06:20

标签: javascript jquery

我遇到以下代码问题:

var pageviews = [
    [1, 0]
];            

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

我已检查过综合浏览量变量,但数组未更新。我可以在我的控制台上看到“res.value”。那么问题是什么?

2 个答案:

答案 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");