javascript - 尽管需要,Dojo/请求仍未定义

标签 javascript ajax dojo orchardcms arcgis-js-api

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

相关文章:

javascript - 使用socket.io,react.js和node.js进行实时通知

javascript - 网格元素在一列而不是一行 Material-UI

php - 当一个 html 加载到另一个 html 的 div 中时,document.ready jquery 不起作用

javascript - 网站多语言支持问题

javascript - Tablesorter 解析器忽略 div 元素

javascript - 使用 JQuery 将事件监听器添加到动态添加的元素?

java - 通过 AJAX 发布 JSON 重音问题

css - 我想将 css 添加到我正在读取节点信息的节点

javascript - Dojo - XHTML 验证?

javascript - 当应用程序从后台移动到前台时会触发哪个 JS 事件