Jquery处理全局变量
Jquery handle global variable
我对以下代码有问题:
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");
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 如何将getJson的响应保存在全局变量中
- 从Javascript方法返回全局变量
- AngularJS中的封装窗口全局变量
- javascript隐式全局变量
- 什么's是处理多个js文件之间交互的简单方法,同时避免溢出全局变量
- 我应该如何处理Resharpers检查器提示'使用可能未分配的属性或全局变量'
- 使用事件处理程序(基本Javascript)时出现全局变量问题
- 在kineticjs中的处理程序函数中使用全局变量
- 事件处理程序之间的全局变量
- javascript图像处理仅在全局变量中
- 具有动态创建元素的事件处理程序的全局变量范围
- javascript垃圾收集器处理全局变量吗?
- 使用AMD Requirejs + Backbonejs时处理全局变量
- 不能访问jQuery事件处理程序中的全局变量
- Jquery处理全局变量
- 可以在事件处理程序中更改全局变量吗?
- 在JavaScript中如何处理带有破折号的ID'(自动创建全局变量)