[英]Javascript Local vs Global
我以為我把這個爛攤子整理在我腦海中,但由於一些奇怪的原因它不能正常工作。
如果在函數/作用域之外聲明一個變量並在函數內部沒有var的情況下引用它,那么它會改變先前聲明的變量......對嗎?
但是,第一個警報返回正確的價格,但第二個(最后一個)警報返回0.我做錯了什么?
//get pricing
var price=0;
var modelid = $("#model_input").val();
var inCode = $("#code_input").val();
$.get("getpricing.php", { 'modelid': modelid ,'code' : inCode }, function(data){
price = data;
alert(price);
});
alert(price);
您正在使用A jax請求。
那些未指定的 unkess是A同步的:它們在后台執行,而不會停止執行腳本的其余部分。
因此,在Ajax請求完成之前執行最后一行代碼的alert
; 這意味着當時price
仍為0。
改變的一種方法是使用同步請求(參見async選項 ); 但我強烈建議不要這樣做; 引用文檔:
默認情況下,所有請求都是異步發送的(默認情況下設置為true)。 如果需要同步請求,請將此選項設置為false。 請注意,同步請求可能會暫時鎖定瀏覽器,並在請求處於活動狀態時禁用任何操作。
而你肯定不希望你的應用程序凍結整個瀏覽器!
您應該重新考慮應用程序的設計方式,在這種情況下:您只能在Ajax請求完成后使用“價格”信息 - 這可能意味着您應該在成功調用函數中放置更多代碼:just在$.get
之后放置代碼是不夠的。
使用.get的httprequests是異步的,因此第一個警報(第二個聲明的警報)將警告原始值,因為請求的回調尚未觸發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.