Dojo/request 尽管有要求,但仍未定义
Dojo/request undefined despite require
在与 Orchard 视图关联的脚本中,我尝试 post 一个 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
方法。
我被困在这里了。 Google 搜索导致 "plains of sheer desperation"(第 5 页以上)没有有用的输出,我的同事也不知道。有谁知道为什么我看不到 dojo/request
以及如何获取它?
据我所知,dojo/request
不会导出全局变量(因为现代 AMD 模块通常不需要),因此 dojo.request
永远不会在任何上下文中工作。
使用 AMD 模块的正确方法是在 回调的主体中使用它们(或者,更好的是,在 AMD 模块中组织您自己的代码以及,并在 define
工厂函数中使用它们。
require([ ... "dojo/request", ... ], function (... request, ...) {
request.post(...);
})
或者,如果您确定 dojo/request
在您要使用它时已经加载,您可以使用单参数 require
来引用它:
require('dojo/request').post(...);
但是,这通常并不理想,并且被视为黑客攻击。
也许 Introduction to AMD Modules 教程有助于更好地理解 AMD 的最佳用法。
在与 Orchard 视图关联的脚本中,我尝试 post 一个 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
方法。
我被困在这里了。 Google 搜索导致 "plains of sheer desperation"(第 5 页以上)没有有用的输出,我的同事也不知道。有谁知道为什么我看不到 dojo/request
以及如何获取它?
据我所知,dojo/request
不会导出全局变量(因为现代 AMD 模块通常不需要),因此 dojo.request
永远不会在任何上下文中工作。
使用 AMD 模块的正确方法是在 回调的主体中使用它们(或者,更好的是,在 AMD 模块中组织您自己的代码以及,并在 define
工厂函数中使用它们。
require([ ... "dojo/request", ... ], function (... request, ...) {
request.post(...);
})
或者,如果您确定 dojo/request
在您要使用它时已经加载,您可以使用单参数 require
来引用它:
require('dojo/request').post(...);
但是,这通常并不理想,并且被视为黑客攻击。
也许 Introduction to AMD Modules 教程有助于更好地理解 AMD 的最佳用法。