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

JavaScript 異步加載腳本變量作用域問題:document.write 導致取值失敗的解決方案

     編輯:程式設計綜合問答

問題現象

使用 document.write 動態引入新浪 IP 查詢腳本,試圖在緊隨其後的代碼中讀取該腳本定義的全局變量 remote_ip_info.country,結果為 undefined。即使用 document.write("var gj=...") 能在頁面顯示正確值,但後續拼接 URL 時仍取不到。

原因分析

  • document.write 執行是異步的,瀏覽器不保證腳本立即加載完畢並執行。
  • 後續代碼同步執行時,遠程腳本可能尚未返回,變量未定義。
  • 直接在 document.write 字符串中寫 var gj=... 雖能在頁面輸出正確值,但這屬於腳本執行上下文,外部作用域無法直接訪問。

解決方案:回調模式

動態創建 <script> 標籤,利用 onload 事件確保腳本加載完成後再執行後續邏輯:

var myLoader = function(url, callback) {
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = url;
    script.onload = callback;
    document.head.appendChild(script);
};

myLoader("https://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=222.5.142.25", function() {
    var gj = remote_ip_info.country; // 此時變量已可用
    var Url = "https://127.0.0.1:82/tj/cs_tjcs.asp";
    var kk = "123";
    myLoader(Url + "?kp=" + kk + "&gj=" + gj, function() {});
});

核心要點

  • 避免使用 document.write 加載外部腳本。
  • 利用 script.onload 保證執行順序。
  • 變量作用域:回調函數形成閉包,可訪問外層變量。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved