是否可以在没有jQuery或IFrames的情况下提交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上传文件吗?
如果我理解正确,则可以使用以下代码异步上传文件。随意修改
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,请尝试以下操作