2

この投稿の最後のコードでは、変数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?!        
  }
4

1 に答える 1

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;
于 2011-09-19T19:41:43.550 に答える