我有下面的代碼的問題: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