首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JS全局變量在AJAX同步請求中賦值失效?原來是拼寫錯誤

     編輯:程式設計綜合問答

現象

代碼中async: false設置同步請求,success回調中賦值cpuNumMax,但$(document).ready中輸出仍為初始值1。

排查過程

  1. 確認同步請求阻塞主線程,理論上賦值應生效。
  2. 檢查變量作用域:cpuNumMax聲明在全局,無遮蔽問題。
  3. 對比賦值前後變量名——發現success中寫成了cpuNumMxa(拼寫錯誤),導致創建了新的全局變量,原變量未被修改。

教訓總結

  • 嚴謹拼寫:JS不聲明變量直接賦值會隱式創建全局變量,極難排查。
  • 使用嚴格模式:"use strict";禁止隱式全局變量,報錯提前發現。
  • 避免同步AJAX:阻塞UI,體驗差;推薦async/await或Promise鏈式調用。
  • 調試技巧:Console打印window.cpuNumMax對比cpuNumMax,或設置斷點觀察變量變化。

修正後代碼片段

var cpuNumMax = 1;
function getVMProductByTypeMap() {
    $.ajax({
        url: "...",
        async: false, // 不推薦,示例保留
        success: function(data) {
            cpuNumMax = parseInt(data[0].cpuNumMax); // 修正拼寫
        }
    });
}
$(document).ready(function() {
    getVMProductByTypeMap();
    console.log(cpuNumMax); // 正確輸出服務器返回值
});
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved