上传文件时dojo.io.iframe错误

时间:2010-04-02 10:13:35

标签: javascript dojo

今天尝试上传图片文件时遇到了一个有趣的问题<使用dojo.io.iframe 2MB。

我调用了处理表单的函数,但在将表单发布到服务器之前,我收到以下错误:

TypeError:ifd.getElementsByTagName(“textarea”)[0]未定义

我用于处理表单帖子的函数是:

function uploadnewlogo(){

var logoDiv = dojo.byId('userlogo');
var logoMsg = dojo.byId('uploadmesg');

//prep the io frame to send logo data.
dojo.io.iframe.send({
    url: "/users/profile/changelogo/",
    method: "post",
    handleAs: "text",
    form: dojo.byId('logoUploadFrm'),
    handle: function(data,ioArgs){

        var response = dojo.fromJson(data);


        if(response.status == 'success'){

            //first clear the image
            //dojo.style(logoDiv, "display", "none");
            logoDiv.innerHTML = "";

            //then we update the image
            logoDiv.innerHTML = response.image;

        }else if(response.status == 'error'){

            logoMsg.innerHTML = data.mesg;

        }else{              

            logoMsg.innerHTML = '<div class="error">Whoops! We can not process your image.</div>';
        }

    },
    error: function(data, ioArgs){

        logoMsg.innerHTML = '<div class="error">' + data + '</div>';

    }
});

}

表单非常基本,只有一个文件输入组件和一个调用这个javascript和dojo的简单按钮。

我的应用程序中有非常类似的代码,上传word / pdf文档并且没有错误,但出于某种原因,这样做。

关于我应该尝试让它无误地工作的任何想法或指示?

哦,如果与后端有任何关系,我会在后端使用php和Zend框架,但我对此表示怀疑,因为它在服务器发生故障之前甚至没有点击它。

非常感谢,

捐赠

3 个答案:

答案 0 :(得分:3)

此错误的另一个常见原因是服务器未正确打包数据。这意味着即使你设置了“handleAs:json”,你也必须发送包含在某些html中的json。这应该是它的样子:

<html>
    <body>
        <textarea>
            { payload: "my json payload here" }
        </textarea>
    </body>
</html>

您的错误是说它无法在您从服务器返回时找到textarea。有关http://docs.dojocampus.org/dojo/io/iframe

的更多信息,请参阅

答案 1 :(得分:1)

由于dojo.io.iframe.send()的加载处理程序已被触发,因此该请求应该已发送到服务器并且响应已返回。我认为服务器的响应不正确。也许服务器返回错误页面。

使用Firebug检查当前页面的DOM并找到由Dojo创建的传输iframe并检查其内容。 Firebug也可以捕获iframe I / O,检查其Net选项卡。您可能会找到此问题的根本原因。

答案 2 :(得分:0)

您是否尊重doc中写的约束?

重要信息:对于除html和xml之外的所有值,服务器响应应该是带有textarea元素的HTML文件。响应数据应该在textarea元素内。使用HTML文档是此传输在响应加载时可以知道的唯一可靠的跨浏览器方式。对于text / html(或XML)mimetype,只返回一个普通的HTML / XML文档。换句话说,您的JSON和Text格式的服务应该返回包含如下的数据: