在与Orchard视图关联的脚本中,我尝试将AJAX发布到具有dojo.request.post
功能的服务器。但是,我只获得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
方法。
我被困在这里。谷歌搜索导致“绝望的平原”(第5页以上)没有有用的输出,我的同事不知道。有谁知道为什么我看不到dojo/request
以及如何获得它?
答案 0 :(得分:3)
据我所知,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使用情况。