在 JavaScript 開發中,常見的一個困擾是:發送 AJAX 請求後,試圖將返回的數據保存到全局變量,供其他腳本使用。雖然在函數外部聲明了全局變量,並在 AJAX 回調中賦值,但在其他地方調用該變量時,卻顯示 undefined。
這是因為 AJAX 默認是非同步執行的。當發送請求後,JavaScript 引擎不會等待響應,而是繼續執行後續代碼。此時全局變量尚未被賦值(仍為初始值或 undefined),導致其他腳本讀取到的值不正確。
將需要使用返回數據的邏輯封裝到一個函數中,然後在 AJAX 成功回調裡調用該函數,並將數據作為參數傳入。這樣能確保數據已經就緒再進行後續操作。
// 定義處理數據的函數
function handleData(responseData) {
// 這裡可以安全地使用 responseData
console.log('數據已就緒:', responseData);
// 其他需要用到數據的代碼...
}
// 發送 AJAX 請求
$.ajax({
url: '/api/data',
method: 'GET',
success: function(data) {
// 請求成功後,調用處理函數
handleData(data);
},
error: function(err) {
console.error('請求失敗:', err);
}
});
async/await 讓代碼看起來像同步寫法,實則非阻塞。通過這種方式,就能可靠地在 AJAX 請求完成後獲取並使用返回數據,避免 undefined 錯誤。