переменная в лексической области сохраняет значение после перезаписи в вызове getJSON - PullRequest
2 голосов
/ 19 сентября 2011

В коде в конце этого поста переменная pPrice определяется через $(addProduct).attr(attrProductPrice);, а затем установить вызов JSON через $.getJSON(url, function(data) { console.log(data); 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?!        
  }

1 Ответ

3 голосов
/ 19 сентября 2011

Вызов 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;
...