2011-09-19 57 views
2

在此柱的端部的代碼中,變量經由 $(addProduct).attr(attrProductPrice);,然後在JSON呼叫建立經由 $.getJSON(url, function(data) { console.log(data); pPrice = data.price; }); 定義被覆蓋之後,但在同步.getJSON呼叫後值,該值已恢復到其原始值。詞法作用域變量保持在一個的getJSON呼叫

如何通過.getJSON調用覆蓋詞法範圍變量定義的定義?源代碼,簡稱爲相關部分:

function addToCart(i,qty){ 
    var pPrice = $(addProduct).attr(attrProductPrice); //original value 
    var url = '/pricefor/' + pId; 
    $.getJSON(url, function(data) { console.log(data); pPrice = data.price; }); // new value 
    console.log(pPrice); // new value lost! back to original value?!   
    } 
+3

您確定''。$ .getJSON''調用是否真的同步嗎?這是默認的異步,除非你在其他地方覆蓋全局jQuery AJAX設置。否則這應該起作用。 – BishopRook

回答

3

getJSON調用是異步的。在從服務器檢索JSON之前,不會調用您的函數。時間線如下所示:

var pPrice = $(addProduct).attr(attrProductPrice); 
var url = '/pricefor/' + pId; 
$.getJSON(url, blah blah); 
console.log(pPrice); 

# some time later, when the server responds, your function is called. 
console.log(data); pPrice = data.price;