没有 jquery 或 iframe 的 AJAX 文件上传/表单提交?

新手上路,请多包涵

是否可以在没有 jQuery 或 IFrame 的情况下提交 AJAX 表单(所以只是纯 JavaScript)?我目前正在发送到一个有效的 struts fileUploadAction。该操作的代码是否仍适用于异步提交,或者是否需要添加以获取异步表单提交?

我正在使用 struts 1.x,当前我的表单是:

 <html:form action="fileUploadAction" method="post" enctype="multipart/form-data">
    ...form elements...
    <html:file property="theFile" />
    ...other elements...
</html:form>

可以提交此表单,从而使用 AJAX 上传文件吗?

原文由 edwardmlyte 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 545
2 个回答

如果我理解正确,您可以使用以下代码异步上传文件。随意修改

var AjaxFileUploader = function () {
    this._file = null;
    var self = this;

    this.uploadFile = function (uploadUrl, file) {
        var xhr = new XMLHttpRequest();
        xhr.onprogress = function (e) {
            ...
        };

        xhr.onload = function (e) {
            ...
        };

        xhr.onerror = function (e) {
            ...
        };

        xhr.open("post", uploadUrl, true);

        xhr.setRequestHeader("Content-Type", "multipart/form-data");
        xhr.setRequestHeader("X-File-Name", file.name);
        xhr.setRequestHeader("X-File-Size", file.size);
        xhr.setRequestHeader("X-File-Type", file.type);

        xhr.send(file);
    };
};

AjaxFileUploader.IsAsyncFileUploadSupported = function () {
    return typeof (new XMLHttpRequest().upload) !== 'undefined';
}

 if (AjaxFileUploader.IsAsyncFileUploadSupported) {
        ajaxFileUploader = new AjaxFileUploader();

        $("form").submit(function () {
            var uploader = $("#fileUploader")[0];

            if (uploader.files.length == 0) {
                return;
            } else {
                ajaxFileUploader.uploadFile(
                    "/YourUploadUrl",
                    uploader.files[0]);
            }

            return false;
        });
    }

要上传表单,请使用 FormData 类,用表单值填充它并用 XHR 发布它。

更新: 对于 HTML4,请尝试以下操作

原文由 Madman 发布,翻译遵循 CC BY-SA 3.0 许可协议

http://fineuploader.com/ 是一个 ajax 文件上传器。

此插件使用 XHR 在 FF3.6+、Safari4+、Chrome 中使用进度条上传多个文件,在其他浏览器中回退到基于隐藏 iframe 的上传,在任何地方都提供良好的用户体验。

原文由 paulslater19 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏