我已将带有iframe上传器的页面从Dojo 1.8迁移到Dojo 1.9.3。我遇到的问题是,只有在Chrome中(IE和Firefox在这方面工作正常),Tomcat启动后第一次上传请求到服务器遇到上面显示的错误,特别是在“dojo / request”的下一节中/iframe.js”。我根据Dojo文档的要求在响应中使用textarea。
function _36(_37, _38) {
if (!_38) {
try {
var _39 = _37.options
, doc = _10.doc(_10._frame)
, _3a = _39.handleAs;
if (_3a !== "html") {
if (_3a === "xml") {
if (doc.documentElement.tagName.toLowerCase() === "html") {
_8("a", doc.documentElement).orphan();
var _3b = doc.documentElement.innerText;
_3b = _3b.replace(/>\s+</g, "><");
_37.text = _6.trim(_3b);
} else {
_37.data = doc;
}
} else {
// the below line throws the TypeError.
_37.text = doc.getElementsByTagName("textarea")[0].value;
}
_5(_37);
} else {
_37.data = doc;
}
} catch (e) {
_38 = e;
}
}
if (_38) {
this.reject(_38);
} else {
if (this._finished) {
this.resolve(_37);
} else {
this.reject(new Error("Invalid dojo/request/iframe request state"));
}
}
}
这是我正在使用的上传器设置代码。我应该注意到这个代码几乎没有从Dojo 1.8版本改变,它没有为这个特定组件使用AMD模块模式。
function setupFileUpload() {
var upload = new dojox.form.Uploader({
label: uploadButtonMessage,
multiple:false,
force: "iframe",
uploadOnSelect:true,
url:"phaseBundleUpload.action",
name: "upload",
onChange: function(/*Array*/ fileArray) {
var actionStatus = dom.byId("globalError");
actionStatus.className = "globalInfo";
actionStatus.innerHTML =
globalInfoMessage +
uploadInProgressMessage +
'<span> </span><img src="' + progressImageUrl + '" title="' + uploadInProgressMessage + '" border="0">';
var uploadedFiles = dom.byId('uploadedFiles');
// clear the uploaded filescombobox
uploadedFiles.options.length = 0; // remove all options from the select
},
onError: function(/*Object or String*/ evtObject){
var actionStatus = dom.byId("globalError");
actionStatus.className = "globalError";
actionStatus.innerHTML = globalErrorMessage + uploadErrorMessage;
},
onComplete: function(arr) {
var actionStatus = dom.byId("globalError");
if(arr.errorMessage != null && arr.errorMessage != "") {
actionStatus.className = "globalError";
actionStatus.innerHTML = globalErrorMessage + arr.errorMessage;
} else {
actionStatus.className = "globalInfo";
actionStatus.innerHTML = globalInfoMessage + uploadSuccessMessage;
buildUploadedFilesList(arr);
setUploadedFilesPath(arr);
}
this.reset();
},
getFileList: function(){
return {};
}
}, "upload");
upload.startup();
}
我在Chrome中做了一些调试,据我所知,对请求的响应过早处理,即请求仍处于待处理状态。因此,请求实际上还没有响应,并且尚未正确定义doc。我不知道为什么会这样,或者为什么它只发生在Chrome或首次上传请求中。第一个请求在其他浏览器中工作正常,第二个及以后的请求也可以正常工作。这只是第一个失败的请求。
我在这里做错了什么?