2012-07-30 93 views
0

的變量聲明之外的外部可見:變量不是這個Ajax請求

var total=0; 

on success of AJAX{ 

total++; 
alert(total);// gives value 
} 

alert(total)// gives zero value 

在這裏我得到了總價值爲0。

回答

1

ajax要求很有可能是異步。這意味着你的alert發生響應返回之前。

依賴響應(如您的警報)需要的任何代碼放置在您的onreadystatechange處理程序。

+0

我Ajax調用後設置文件共此值。 – Judy 2012-07-30 23:15:41

+0

@Judy這不會有所作爲,如果調用是異步 – Daedalus 2012-07-30 23:16:31

+0

@Judy:對了,Ajax調用是異步的* *。如*在*不同步*。如在,它發生*亂序*。換句話說,請求*在響應返回之前不會阻止*後續代碼的執行。 – 2012-07-30 23:16:41

0

它不清楚究竟是什麼問題,但它聽起來像典型的異步混淆。一個XMLHttpRequest默認情況下,運行異步及其回調時遇到一個事件火(如,readyState的4)。

因此,任何你的Ajax處理程序會被觸發之前,您alert()聲明最有可能遇到。

所以,最簡單的辦法是,將是alert()到您的.onreadystatechange分別.onload事件處理程序,以處理該success部分的最底部。

最糟糕的解決方案(即使沒有人會推薦)是將您的XMLHttpRequest設置爲syncronous。這意味着,在請求運行的時候,您的瀏覽器及其UI線程被鎖定,直到請求結束。