使用iframe的dojox / form / Uploader:解析服务器结果时出错TypeError:无法读取未定义

时间:2018-03-12 14:04:11

标签: google-chrome file-upload dojo

我已将带有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>&nbsp;</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或首次上传请求中。第一个请求在其他浏览器中工作正常,第二个及以后的请求也可以正常工作。这只是第一个失败的请求。

我在这里做错了什么?

0 个答案:

没有答案