我尝试上传文件并使用post方法将其发送到java servlet。我的道场是1.8。刚刚开始使用javascript,仍然需要学习。如果可以,请纠正我。所以我有几个未定义的属性:label,UploaderID和dojo源路径应该是真的!
**************** REVISED CODE ***************************
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>dojox.form.Uploader</title>
<link href="dijit/themes/dijit.css" rel="stylesheet" />
<link href="dijit/themes/claro/Common.css" rel="stylesheet" />
<link href="dijit/themes/claro/form/Common.css" rel="stylesheet" />
<link href="dijit/themes/claro/form/Button.css" rel="stylesheet" />
<link href="dojox/form/resources/UploaderFileList.css" rel="stylesheet" />
<script type="text/javascript"
src="//ajax.googleapis.com/ajax/libs/dojo/1.8/dojo/dojo.js"
data-dojo-config="parseOnLoad: true, async: true,
isDebug: true,
packages: [{name: 'dojo', location: '.'},
{name: 'dijit', location:
'/dojo/dijit'},
{name: 'dojox', location:
'/dojo/dojox'},
]"></script>
<script>
dojo.require("dojo.domReady")
dojo.require("dijit.form.Button");
dojo.require("dijit.Dialog");
dojo.require("dijit.form.TextBox");
dojo.require("dojox.form.Uploader");
dojo.require("dojox.form.uploader.FileList");
dojo.require("dojo.parser");
});
</script>
</head>
<body class="claro">
<form method="post" action="user" id="myForm" enctype="multipart/form-data" >
<fieldset style="background-color:lightblue;">
<h1 id="greeting">User Administration</h1>
<p>First Name: <input type="text" name="fname" size="20">
LastName: <input type="text" name="lname" size="20"></p>
<input class="browseButton" name="uploadedfile" multiple="false"
type="file" data-dojo-type="dojox.form.Uploader" label="Select Some File"
id="uploader" />
<p><input type="submit" label="Submit" data-dojo-type="dijit.form.Button" />
</p>
<div id="files" data-dojo-type="dojox.form.uploader.FileList"
uploaderId="uploader"></div>
</fieldset>
</form>
</body>
</html>
答案 0 :(得分:0)
我在这里注意到几个错误:
<script>
中的第一行:
dojo.required("dojo.domready")
dojo.required()
不存在,应为dojo.require()
。
除此之外,dojo.domready
甚至不是一个模块,应该是dojo.domReady
以下代码是错误的:
function(parser){
parser.parse();
});
您可能从使用AMD的代码示例中复制粘贴它,但是,您不再使用AMD(但dojo.require()
),因此此代码甚至无法编译。
但是,您正在使用parseOnLoad
机制,因此实际上您不需要自己解析页面(这甚至会导致错误,因为您要解析相同的小部件两次)。
删除代码的那部分,只需要使解析加载机制起作用:
dojo.require("dojo.parser");
这段代码看起来有些尝试将AMD示例转换为非AMD代码失败,另一件事你做错了:
dojo.require("dijit.form/Button");
在使用AMD之前的代码(dijit.form.Button
)时,您应该使用点符号。 Dojo可能会理解这一点,至少它会在最近的Dojo版本中,但我怀疑这将在旧版本的Dojo中有效。
您要按换行符拆分属性名称,例如:
<input class="browseButton" name="uploadedfile" multiple="false" type="file" data-
dojo-type="dojox.form.Uploader"
label="Select Some File" id="uploader" />
属性名称data-dojo-type
应该是1行,如果将该属性拆分为多行,我认为它无效。
在加载页面时解析页面的Dojo配置属性是parseOnLoad
(不是ParseOnLoad
)。我不确定Dojo是否处理这些属性不区分大小写,但通常JavaScript属性区分大小写。
但是,您已经在加载Dojo的data-dojo-config
标记上使用<script>
属性,因此您实际上甚至不需要它。
如果您修复了所有这些错误,您的脚本应该可以正常工作(有或没有AMD),正如您在这个小提琴中看到的那样:http://jsfiddle.net/e65EY/
答案 1 :(得分:-1)
是否正确设置了dojo.js?你是如何使用你的申请的?您是否已在计算机中或使用某个远程服务器下载了dojo源文件。 您可以使用google CDN,如下所示。还要查看设置你的道场来源的here。
src="//ajax.googleapis.com/ajax/libs/dojo/1.8/dojo/dojo.js"
除了@Dmitri评论。
删除以下行。
<script> dojoConfig ={isDebug:true, ParseOnLoad: true,};</script>
因为您正在重新定义下一行中的dojoConfig。数据道场-配置
<script type="text/javascript" src="dojo/dojo.js"
data-dojo-config="async: true,isDebug: true,parseOnLoad: true"></script>
您也可以使用新的AMD格式进行require()调用,如下所示。
<script type="text/javascript">
require([
"dojo/parser",
"dijit/form/Button",
"dijit/Dialog",
"dijit/form/TextBox",
"dojox/form/Uploader",
"dojox/form/uploader/FileList"
"dojo/domReady!"
], function (parser, Button, Dialog, TextBox, Uploader, FileList ) {
// now parse the page for widgets
parser.parse();
// Your code will go here
});
</script>