Javascript 词汇范围变量在getJSON调用中被覆盖后保留值

Javascript 词汇范围变量在getJSON调用中被覆盖后保留值,javascript,jquery,variables,getjson,lexical,Javascript,Jquery,Variables,Getjson,Lexical,在本文末尾的代码中,变量pPrice通过 $(addProduct).attr(attrProductPrice)然后通过 $.getJSON(url,函数(数据){console.log(数据);pPrice=data.price;}) 但是在同步.getJSON调用之后,该值已返回到其原始值 如何通过.getJSON调用覆盖词汇范围变量定义的定义?源代码缩写为相关部分: function addToCart(i,qty){ var pPrice = $(addProduct).

在本文末尾的代码中,变量
pPrice
通过
$(addProduct).attr(attrProductPrice)
然后通过
$.getJSON(url,函数(数据){console.log(数据);pPrice=data.price;})
但是在同步
.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?!        
  }

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;

您确定
$.getJSON
调用确实是同步的吗?默认情况下它是异步的,除非您在其他地方重写了全局jQuery AJAX设置。否则,这应该是可行的。