尽管需要

时间:2015-11-13 10:21:04

标签: javascript ajax dojo orchardcms arcgis-js-api

在与Orchard视图关联的脚本中,我尝试将AJAX发布到具有dojo.request.post功能的服务器。但是,我只获得esri/requestdojo/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以及如何获得它?

1 个答案:

答案 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使用情况。