Jquery处理全局变量

Jquery handle global variable

本文关键字:全局变量 处理 Jquery      更新时间:2023-09-26

我对以下代码有问题:

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

我已经检查了页面浏览量变量,但数组没有更新。我可以在控制台上看到"res.value"。那么问题是什么呢?

很可能在错误的位置检查pageviews数组。像任何Ajax操作一样,.get()在默认情况下异步工作,这意味着您不能在.get()调用后检查数组并期望数据已经更新。

事实上,它不是,因为浏览器和你的网络需要一段时间来完成数据传输。如果您立即检查您的数组,在您的.push()调用之后,我保证数组已按预期更新。

$.get( /* ... */ );
console.log( pageviews ); // wrong result, the array was not even touched at this point

你可能会发现jquery的隐式承诺对象很有用,你可以像

那样使用它
$.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 );
});

如果在调用$.get后直接检查pageviews,它将在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");