簡體   English   中英

Javascript Local vs Global

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM