AJAX文件上传/表单提交,而不jQuery的或iFrame?(AJAX file upload/f

2019-06-26 07:21发布

是否有可能做一个AJAX表单提交不jQuery的或iFrame(所以只是纯JavaScript)? 我目前发送到支柱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上传的文件?

Answer 1:

如果我理解你正确,则可以使用下面的代码上传文件异步。 修改它,只要你喜欢

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尝试以下

  • http://www.albanx.com/?pid=5&subid=21
  • 使用JSP和JavaScript异步文件上传(AJAX文件上传)


Answer 2:

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

该插件使用XHR用于上传与FF3.6 +,Safari4的+,Chrome浏览器进度条的多个文件,并回落到在其他浏览器隐藏的iframe基于上传,处处提供良好的用户体验。



Answer 3:

无需添加的jQuery或任何其他第三方库,只需添加IPerfect JS库,你是好去。

IP_uploadFile(URL,的responseType,此[对象],[dynamicFunctionForResponse])

如果用户选择的responseType为“HTML”,然后dynamicFunctionForResponse将得到HTML格式的响应。 在下面的例子中,你将获得“完成”的警报响应。

HTML

    <script type="text/javascript" src="http://services.iperfect.net/js/IP_generalLib.js"></script>


    <script language='javascript'>
    function testResponse(data){
    alert(data)
    }
    </script>

身体

    <form method="POST" enctype="multipart/form-data"  onsubmit="IP_uploadFile('testupload.php','html',this,testResponse); return false;">
        <input type="file" name="file1">
        <input type="submit" name="submit1" value="Click here">
    </form>

PHP:testupload.php

    move_uploaded_file($_FILES['file1']['tmp_name'], realpath("./")."/upload/".$_FILES["file1"]["name"]);
    echo "done";


文章来源: AJAX file upload/form submit without jquery or iframes?