鍍金池/ 問答/網(wǎng)絡(luò)安全  HTML/ js如何動態(tài)引入script,然后require該引入的js

js如何動態(tài)引入script,然后require該引入的js

問題描述

我需要動態(tài)引入一個js,<script type="text/javascript" src="http://192.168.1.189:6789/arcgis_js_api/library/3.24/init.js"></script>
現(xiàn)在需要動態(tài)從后臺拼接src的地址,引入不寫成固定的方便維護

相關(guān)代碼

我試過這樣引入js的方法,但控制臺在調(diào)用initGisMap()的時候報錯Uncaught SyntaxError: Unexpected token < .如果我直接在head里靜態(tài)引入這個script地圖是可以正常顯示的.想問問這樣寫法是否正確,或有沒有其他的思路實現(xiàn)這樣的功能

$(function() {
  //得到html的頭部dom
  var theHead = document.getElementsByTagName('head').item(0);
  //創(chuàng)建腳本的dom對象實例
  var myScript = document.createElement('script');
  myScript.src = 'http://172.42.1.146:6789/arcgis_js_api/library/3.24/3.24/init.js';    
  myScript.type = 'text/javascript';  
  myScript.defer = true;              
  myScript.onload = function() {
    initGisMap()
  }
  theHead.appendChild(myScript);      
});

function initGisMap(){
  require(["esri/map",
      "esri/tasks/FindTask",
      "esri/tasks/FindParameters",
      "extras/ClusterLayer",
      "dojo/domReady!"
    ],
    function (Map, FindTask, FindParameters, ClusterLayer) {
      var map;
      map = new Map("map", {
        center: [112.28888, 31.38888], // 湖北
        slider: false,
        zoom: 0,
        scale: 5000000, //成都
        //最大縮放比例
        maxScale: 5000,
        //最小縮放比例
        minScale: 3000000,
        isPanArrows: true,
        logo: false,
      });
      //http://192.168.1.189:6080/arcgis/rest/services/hubei10/MapServer 公司GIS底層
      var mapServiceURL = "http://172.42.1.146:6080/arcgis/rest/services/HBGSOMP/MapServer" //聯(lián)網(wǎng)中心GIS底層
      var layer = new esri.layers.ArcGISDynamicMapServiceLayer(mapServiceURL)
      map.addLayer(layer);
      map.on("load", mapLoaded);
      //  綁定滾輪事件
      map.on('mouse-wheel', function (o) {
        // 根據(jù)縮放等級禁用縮放
        var scale = Math.ceil(map.getScale())
        var minScale = map.getMinScale()
        var maxScale = map.getMaxScale()
        if (scale == minScale) {
          map.setScale(minScale)
          map.setZoom(0)
          map.centerAt([112.28888, 31.38888])

        }
      })

      function mapLoaded() {
        //窗口打開第一次不resize地圖
        if (map && map.map) {
          map.map.resize(true);
          map.map.reposition();
        }
        // 綁定map對象到window
        window.map = map
        // 底圖加載完后渲染功能頁面
        start()
      }

      this.getClusterLayer = function (data) {
        return new ClusterLayer(data)
      }
    })
回答
編輯回答
涼薄

如果有模板引擎就直接用就可以了?。咳绻麤]有用接口返回那個js的地址,然后用$.getScript引入

2018年5月16日 10:20
編輯回答
薔薇花
theHead.appendChild(myScript);   

這個以及以上代碼都寫到 $(function(){})外面試試

2017年12月25日 21:41