在与Orchard视图关联的脚本中,我尝试使用dojo.request.post函数将AJAX发布到服务器。但是,我只得到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方法。

我被困在这里。 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的最佳用法。

10-05 20:53
查看更多