我有下面的代码的问题:jQuery的处理全局变量
var pageviews = [
[1, 0]
];
$.get("http://bla..bla",
function(res){
pageviews.push([2, res.value]);
}, "json");
我检查的浏览量变量,但数组不会被更新。我可以在控制台上看到“res.value”。那么问题是什么?
我有下面的代码的问题:jQuery的处理全局变量
var pageviews = [
[1, 0]
];
$.get("http://bla..bla",
function(res){
pageviews.push([2, res.value]);
}, "json");
我检查的浏览量变量,但数组不会被更新。我可以在控制台上看到“res.value”。那么问题是什么?
其最有可能的,你在错误的地方检查pageviews
阵列。 Liky所有Ajax操作,.get()
默认情况下异步工作,这意味着你不能只检查数组.get()
电话后,预计该数据已经更新。
逸岸,它不是,因为它需要一段时间的浏览器和网络来完成数据传输。如果立即检查您的阵列,您.push()
电话后,我答应如预期的那样阵列更新。
$.get(/* ... */);
console.log(pageviews); // wrong result, the array was not even touched at this point
您可能会发现jQuerys隐含承诺对象有帮助,您可以使用它像
$.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");
100%。 – 2013-04-26 14:20:33
虽然确实没有更改的值,但它是异步的,如果主JS线程冻结了足够长的时间,它会在返回该行之前返回结果。不过不太可能,这仍然是可能的。 这种情况,虽然是更不可能,因为没有可能锁定了AJAX请求和JavaScript的下一行之间的主线程精深加工。仍然可能,只是极不可能。 – Turnerj 2013-04-26 14:23:15
当您检查'pageviews'的价值?我猜测你正在'$ .get'之后执行它。 – 2013-04-26 14:07:12
如果您希望在'$ .get()'调用之后的语句中更新变量,那么这就是您的问题。响应异步返回,因此您的变量将在稍后一段时间才会更新。在事实上的时间 – Pointy 2013-04-26 14:07:48
http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call – 2013-04-26 14:08:04