在与Orchard视图关联的脚本中,我尝试使用dojo.request.post
函数将AJAX发布到服务器。但是,我只得到esri/request
,dojo/request
是未定义的。我在require
语句所在的函数外部调用该请求,但是只要我以正确的格式使用它们,其他必需的包就不会有问题。 Dojo/request
在我们的另一个项目中工作,因此我怀疑Orchard搞砸了(另一个项目的dojo/request
使用在普通页面中,而不是在视图中),尽管我希望由它引起的问题会更早地浮出水面。
该代码的重要部分:
require([ ... "dojo/request", ... ], function (... Request, ...) {
//custom init function contents
})
function sendResults(featureSet) {
//custom code processing the parameter, making uri, JSON and like
dojo.request.post(uri, {
//sending data
})
}
我的剃须刀在同一文件中的要求部分包含:
Script.Require("esri/JavaScriptApi").AtHead();
Script.Require("dojo").AtHead();
这些定义在
resourcemanifest.cs
中: manifest.DefineScript("esri/JavaScriptApi").SetUrl("http://js.arcgis.com/3.14/");
manifest.DefineScript("dojo").SetUrl("//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js");
尝试运行代码时收到的错误:
TypeError: dojo.request is undefined
我已经在FireBug中对其进行了测试,并确认
dojo/request
不存在(对于变量,如dojo/Request
一样),只有esri/request
是函数,但没有post
方法。我被困在这里。 Google搜索导致“纯属绝望”(第5页以上),没有有用的输出,而我的同事们也不知道。有谁知道为什么我看不到
dojo/request
以及如何获得它? 最佳答案
据我所知,dojo/request
不会导出全局(因为通常不需要现代AMD模块),因此dojo.request
在任何情况下都不会起作用。
使用AMD模块的适当方法是在require
回调的主体中使用它们(或者更好的是,也可以在AMD模块中组织自己的代码,并在define
工厂函数中使用它们)。
require([ ... "dojo/request", ... ], function (... request, ...) {
request.post(...);
})
或者,如果确定要在使用
dojo/request
时已将其装入,则可以使用单参数require
来引用它:require('dojo/request').post(...);
但是,这通常并不理想,被视为黑客。
Introduction to AMD Modules教程可能有助于更好地了解AMD的最佳用法。