Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript dojo.xd.js无法识别dojox.data.CsvStore_Javascript_Cdn_Dojo - Fatal编程技术网

Javascript dojo.xd.js无法识别dojox.data.CsvStore

Javascript dojo.xd.js无法识别dojox.data.CsvStore,javascript,cdn,dojo,Javascript,Cdn,Dojo,当我使用导入时,例如 <script type="text/javascript" src="http://o.aolcdn.com/dojo/1.2.3/dojo/dojo.xd.js" djConfig="parseOnLoad:true, isDebug: true"></script> 对于诸如 var stateStore = new dojox.data.CsvStore({url: "dojo-passcsv.php", label: "nam

当我使用导入时,例如

<script type="text/javascript" src="http://o.aolcdn.com/dojo/1.2.3/dojo/dojo.xd.js"
      djConfig="parseOnLoad:true, isDebug: true"></script>
对于诸如

var stateStore = new dojox.data.CsvStore({url: "dojo-passcsv.php", label: "name"});
但是,如果我使用从本地安装的dojo导入,例如

<script type="text/javascript" src="dojo-release-1.2.3/dojo/dojo.js"
     djConfig="parseOnLoad:true, isDebug: true"></script>

您是否在dojo.addOnLoad()中运行该代码?例如:

dojo.addOnLoad(function(){
   dojo.require("dojox.data.CsvStore");
   var stateStore = new dojox.data.CsvStore({url: "dojo-passcsv.php", label: "name"});
});
另外,你在使用Firefox3吗?如果是这样,请尝试将您的
块放在
部分的末尾,就在关闭
标记之前。(我知道这不是标准做法,但它与Firefox相关,应该在3.0.6版中修复。)


除此之外,您的代码似乎还不错,这种奇怪的差异通常归结为加载dojo模块的时间问题。

对您的更新做出反应:

我强烈认为您应该尝试使用
dojo.addOnLoad()
。您的
的最后两个
部分将合并为:

<script>
   dojo.addOnLoad(function(){
      dojo.require("dojox.data.CsvStore");
      dojo.require("dijit.Tree");
      dojo.require("dojo.parser");  /* I don't think you really need this line */
      var stateStore = new dojox.data.CsvStore({url: "states.csv", label: "name"});
   });
</script>

dojo.addOnLoad(函数(){
require(“dojox.data.CsvStore”);
dojo.require(“dijit.Tree”);
require(“dojo.parser”);/*我认为您并不真正需要这一行*/
var stateStore=new dojox.data.CsvStore({url:“states.csv”,label:“name”});
});
原始代码的问题在于,您无法保证在即将创建
stateStore
实例时,构造函数
dojox.data.CsvStore
已被读取。这就是
dojo.addOnLoad()
的作用,它保证在执行作为
addOnLoad()的参数传递的抽象函数之前加载其余的javascript

因为这是一个时间问题,您自己的原始代码有时可能会工作,其他代码可能不会工作:这取决于下载速度和浏览器将各种javascript位组合在一起的顺序。这就是为什么使用dojo的远程库有时可能会得到与使用您自己的dojo库本地副本不同的结果

也就是说,如果您使用的是Firefox3(早于3.0.6),那么请记住我所说的已知bug。在这种情况下,您可能希望将该
块放在关闭
标记之前。。。(该选项也适用于其他浏览器。)

是正确的,这是关键,但它应该在dojo.requires之后,而不是之前。此外,必须从自动djConfig.parseOnLoad(在addOnLoad之前触发)切换到手动启动解析器。当您仍然将该商店URL更改为指向某个合理的位置(在您的网站上)时,这将起作用:

<script>
   dojo.require("dojox.data.CsvStore");
   dojo.require("dijit.Tree");
   dojo.require("dojo.parser");
   dojo.addOnLoad(function(){
      stateStore = new dojox.data.CsvStore({url: "states.csv", label: "name"});
      dojo.parser.parse();
   });
</script>

require(“dojox.data.CsvStore”);
dojo.require(“dijit.Tree”);
require(“dojo.parser”);
dojo.addOnLoad(函数(){
stateStore=new dojox.data.CsvStore({url:“states.csv”,标签:“name”});
parser.parse();
});

注意:还有一个非常类似的例子:。

谢谢你的回答。我已经粘贴了问题中“有效”的完整代码。我没有在dojo.addOnLoad()中使用var stateStore声明,但它似乎工作正常。然而,当我输入CDN引用时,它就中断了。你的问题是:你要实例化一个尚未加载的类。它在本地加载文件时起作用,因为它们是在javascript执行之前加载的。(当然,本地加载文件比使用CDN更快)。无论如何,使用dojo.addOnLoad是XD加载的唯一方法。
<script>
   dojo.addOnLoad(function(){
      dojo.require("dojox.data.CsvStore");
      dojo.require("dijit.Tree");
      dojo.require("dojo.parser");  /* I don't think you really need this line */
      var stateStore = new dojox.data.CsvStore({url: "states.csv", label: "name"});
   });
</script>
<script>
   dojo.require("dojox.data.CsvStore");
   dojo.require("dijit.Tree");
   dojo.require("dojo.parser");
   dojo.addOnLoad(function(){
      stateStore = new dojox.data.CsvStore({url: "states.csv", label: "name"});
      dojo.parser.parse();
   });
</script>