dojo.require语句未按预期加载esri映射模块

dojo.require语句未按预期加载esri映射模块,dojo,require,arcgis,esri,arcgis-js-api,Dojo,Require,Arcgis,Esri,Arcgis Js Api,我正在开发一个php应用程序,使用“arcgis”API加载地图。请在下面找到URL: http://js.arcgis.com/3.11/ 为了在我的应用程序中加载arcgis地图,我必须使用 dojo.require("esri.map"); 因此,在我的单页PHP应用程序中,我添加了以下require语句: <script type="text/javascript"> dojo.require("esri.map"); </script> 但是当我运行

我正在开发一个php应用程序,使用“arcgis”API加载地图。请在下面找到URL:

http://js.arcgis.com/3.11/
为了在我的应用程序中加载arcgis地图,我必须使用

dojo.require("esri.map");
因此,在我的单页PHP应用程序中,我添加了以下require语句:

<script type="text/javascript">
   dojo.require("esri.map");
</script>
但是当我运行这个应用程序时,在“this.map=new esri.map(“mapDiv”,myOptions);”行中出现了一个错误:“uncaughttypeerror:undefined不是一个函数”

如果我打开开发工具,通过在require和esri.Map语句中保留断点来运行相同的代码,我可以看到映射正在加载。但是如果我运行它而不打开开发工具,那么我就面临这个问题

为什么dojo.require语句不能按预期工作? 我怎么了??
请回复

您正在尝试加载带有旧模块要求的映射模块。尝试使用AMD语法要求映射,如所示:
require([“esri/map”],函数(map){/*代码在这里*/})

您需要将JavaScript代码包装在对
dojo.ready
的调用中

HTML文件:

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
    <title>JavaScript in Separate File</title>

    <link rel="stylesheet" href="http://js.arcgis.com/3.11/dijit/themes/claro/claro.css">
    <link rel="stylesheet" href="http://js.arcgis.com/3.11/esri/css/esri.css">
    <style>
      html, body { height: 100%; width: 100%; margin: 0; padding: 0; }
      #mapDiv{padding:0;}
    </style>

    <script>var dojoConfig = {parseOnLoad: true};</script>
    <script src="//js.arcgis.com/3.11/"></script>
    <script src="code.js"></script>
    <script>
      dojo.require("esri.map");
      dojo.require("esri.layers.agstiled");
    </script>
  </head>
  <body class="claro" >
    <div id="mapDiv"></div>
  </body>
</html>

我也尝试过。但在我的应用程序中,我必须在其他地方初始化map,而不是在require函数中初始化它。原因是我的应用程序使用的是Backbone.js,我不能在视图中直接包含此代码。所以我做了下面的var赋值;要求([“esri/map”],函数(map){mapAssign=map});在一个视图中,我使用了以下代码:this.map=newmapsign(“mapDiv”,myOptions);在这样做的时候,我得到了同样的问题,因为require函数不是首先命中的。相反,映射初始化是先命中的。我用主干视图和esri映射创建了一个可以查看的。我建议你多了解AMD
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
    <title>JavaScript in Separate File</title>

    <link rel="stylesheet" href="http://js.arcgis.com/3.11/dijit/themes/claro/claro.css">
    <link rel="stylesheet" href="http://js.arcgis.com/3.11/esri/css/esri.css">
    <style>
      html, body { height: 100%; width: 100%; margin: 0; padding: 0; }
      #mapDiv{padding:0;}
    </style>

    <script>var dojoConfig = {parseOnLoad: true};</script>
    <script src="//js.arcgis.com/3.11/"></script>
    <script src="code.js"></script>
    <script>
      dojo.require("esri.map");
      dojo.require("esri.layers.agstiled");
    </script>
  </head>
  <body class="claro" >
    <div id="mapDiv"></div>
  </body>
</html>
dojo.ready(function() { 
  var myOptions = {
                  maxZoom: 20,
                  minZoom: 3,
                  zoom:5,
                  isZoomSlider: false,
                  sliderStyle: "large",
                  sliderPosition: "top-right"             
              };
  this.map = new esri.Map("mapDiv", myOptions);
  var layer = new esri.layers.ArcGISTiledMapServiceLayer(
    "http://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer");
  this.map.addLayer(layer);
});