在与 Orchard View 关联的脚本中,我尝试使用 dojo.request.post
函数将 AJAX 发布到服务器。但是,我只得到 esri/request
,dojo/request
未定义。我在 require
语句所在的函数外部调用请求,但只要我以正确的格式使用其他必需的包,就没有问题。 Dojo/request
在我们的其他项目中工作,所以我怀疑 Orchard 把事情搞砸了(其他项目的 dojo/request
使用是在普通页面中,而不是在 View 中) ,尽管我预计由它引起的问题会更早地浮出水面。
代码的重要部分:
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
})
}
我的 Razor 要求同一文件中的部分包含:
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
以及如何获取它?
最佳答案
据我所知,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 的最佳使用方式。
关于javascript - 尽管需要,Dojo/请求仍未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33690467/